畅畅今天暴富了吗 2023-11-02 01:21 采纳率: 0%
浏览 8

黄色部分数字是我想要匹配到的结果(即靠近文字的部分),红色部分是干扰项若我只想匹配到黄色部分该如何去写正则表达式

img

黄色部分数字是我想要匹配到的结果(即靠近文字的部分),红色部分是干扰项
若我只想匹配到黄色部分该如何去写正则表达式?
代码第17行是我写的正则,请帮我指出并改正


import docx
from docx.oxml import parse_xml
from docx.oxml.xmlchemy import serialize_for_reading
from docx.oxml.ns import nsmap,qn
import re

path = "2023年10月份人格养成(最初版).docx"
doc = docx.Document(path)
#print(doc.paragraphs[2].text)

paragraphs = doc.paragraphs
print('段落0字体:',paragraphs[0].style.font.name)
print('段落3字体:',paragraphs[3].style.font.name)
#print(paragraphs[1]._p.xml)
#find = re.findall(".*<w:t>(.*?)</w:t>",paragraphs[1]._p.xml)
#find = re.findall('w:szCs w:val=\'([1-9]{2})\'(?=.*外国语学院十月份学风建设)',paragraphs[1]._p.xml)
find = re.findall('<w:p>.*?<w:szCs\s+w:val="52"(?=.*外国语学院十月份学风建设).*?<\/w:p>',paragraphs[1]._p.xml)
print(find)

#print(paragraphs[1]._p.xml)




"""with open("1.txt","w",encoding="utf-8") as a:
    a.write(paragraphs[1]._p.xml)
print("\n"*2)


with open("2.txt","w",encoding="utf-8") as a:
    a.write(paragraphs[2]._p.xml)


print(paragraphs[3]._p.xml)
with open("3.txt","w",encoding="utf-8") as a:
    a.write(paragraphs[3]._p.xml)

"""

下面是xml


```xml

<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData">
  <w:pPr>
    <w:pStyle w:val="style0"/>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="宋体" w:cs="宋体" w:eastAsia="宋体" w:hAnsi="宋体"/>
      <w:b/>
      <w:bCs/>
      <w:sz w:val="52"/>
      <w:szCs w:val="52"/>
    </w:rPr>
  </w:pPr>
  <w:r>
    <w:rPr>
      <w:rFonts w:ascii="宋体" w:cs="宋体" w:eastAsia="宋体" w:hAnsi="'体" w:hint="eastAsia"/>
      <w:b/>
      <w:bCs/>
      <w:sz w:val="52"/>
      <w:szCs w:val="52"/>
    </w:rPr>
    <w:t>外国语学院十月份学风建设</w:t>
  </w:r>
</w:p>

```

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-02 04:12
    关注

    【以下回答由 GPT 生成】

    问题解决方案: 问题标题: 如何通过正则表达式匹配到黄色部分数字,而忽略红色部分干扰项?

    问题内容:

    首先,通过观察给出的代码和文本数据,可以看出需要匹配的黄色部分数字位于<w:p></w:p>标签之间,同时需要满足<w:szCs w:val="52">(.*外国语学院十月份学风建设)的条件。

    基于这些条件,可以使用正则表达式来实现匹配,具体步骤如下:

    1. 使用re.findall()函数来进行匹配,该函数可以返回所有满足条件的匹配项。

    python find = re.findall(r'<w:p>.*?<w:szCs\s+w:val="52"(?=.*外国语学院十月份学风建设).*?</w:p>', paragraphs[1]._p.xml)

    这里使用了非贪婪匹配,通过.*?来匹配最短的内容。

    1. 将匹配结果打印出来,以查看是否成功匹配到黄色部分的数字。

    python print(find)

    以上代码将打印出所有满足条件的匹配项。

    注意事项: - 当前代码仅针对给出的具体问题进行解答,如果文本数据的结构发生变化,可能需要进行相应的修改。 - 正则表达式中使用了特殊字符和转义字符,因此在使用时请注意使用原始字符串(前面添加r前缀)或者进行适当的转义。 - 部分关键代码被注释掉,根据实际需要可以进行取消注释并使用。 - 由于没有提供完整的文本数据,无法确认匹配是否准确,需要根据实际情况进行调试和验证。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月2日