在我的word文件中包含一些具有不同数字的要求为" [SWS_Rte_01252] |,[SWS_Rte_01253] |"。我想收集所有这些要求为(SWS_Rte_01252,SWS_Rte_01253)我写了一个python脚本为此,但它没有正常工作,对这个问题的任何建议?
import re
import docx
regex = r"\\[SWS_Rte_*\\]\\ \\|"
doc = docx.Document('selection5.docx')
f = open('Res.txt',"w")
for para in doc.paragraphs:
line = para.text
if re.match(regex, line):
str = line[line.index('[') : line.index(']')]
f.write(str+'\n')
答案 0 :(得分:1)
您的正则表达式不正确。如果要转义特殊字符,则应使用反斜杠\
。你写了\\
- 这意味着你试图逃避反斜杠,也就是说,你试图匹配反斜杠。
正确的正则表达式是你的问题:
regex = r"\[SWS_Rte_[0-9]+\]"
如果要访问匹配的值,则应使用反向引用,即修改正则表达式,在要提取的内容周围添加常规括号:
regex = r"\[(SWS_Rte_[0-9]+)\]"
现在,在匹配正则表达式后,您可以提取与regex.group(1)
匹配的文本正则表达式。您可以阅读有关反向引用的更多信息here。
注意:
另外,如果您检查正则表达式文档,则应该看到差异,因此使用re.search
代替re.match
。
re.match
的文档:
如果字符串开头的零个或多个字符匹配 正则表达式模式,返回相应的MatchObject 实例。如果字符串与模式不匹配,则返回None;注意 这与零长度匹配不同。
re.search
的文档:
扫描字符串,查找常规的第一个位置 表达式模式产生匹配,并返回相应的 MatchObject实例。如果字符串中没有位置匹配则返回None 模式;请注意,这与查找零长度不同 匹配字符串中的某个点。
答案 1 :(得分:0)
我认为你的正则表达式存在问题。试试这个......
\[[A-Z]{3,}_[A-Za-z]{3,}_\d+\]\s\|
如果你想要抓住某些东西或类似的东西“[SwsRt_Rhtte_552663] |”。用这个..
\[\w+_\w+_\d+\]\s\|
或者如果你想要这样的话。“[SWS_Rte_ *] |”
\[SWS_Rte_\d+\]\s\|