使用正则表达式来获取需求

时间:2017-06-17 07:13:06

标签: python regex

在我的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')

2 个答案:

答案 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\|