python正则表达式与变量输入

时间:2013-07-23 15:05:08

标签: python regex

我有一个文本文件(例如test.txt),例如

a  ......
aa ......
a+a .....
aa+ .....
a+  .....
aaa .....
.........

现在我想找到任何特定字符串的行号,例如'a','aa +'等我试图使用正则表达式找到输入字符串的完全匹配。

name='a'

import re
p = re.compile(r'\b'+re.escape(name)+ r'\b')

i=0
with open('test.txt') as inpfile:
    for num, line in enumerate(inpfile):
        if p.search(line):
            print num

程序应仅打印“0”,但打印0,2,4。

我的预期输出是

name='a'

输出:0

name='aa'

输出:1

name='aa+'

输出:3等等......

我明白我上面使用的正则表达式是不正确的。但如果您请分享您的意见/建议以编译正则表达式,以便为所有模式提供所需的输出,将会很有帮助。

感谢。

3 个答案:

答案 0 :(得分:1)

为什么打印2和4? a+aa+都包含a被字边界包围,与\b指定的完全一致。也许您想要匹配行的开头和结尾? E.g。

name='a'

import re
p = re.compile('^'+re.escape(name)+ '$')

with open('test.txt') as inpfile:
    for num, line in enumerate(inpfile):
        if p.search(line.rstrip(r'\n')):
            print num

但是,如果你想要准确地匹配这一行,为什么要使用正则表达式呢?

name='a'

with open('test.txt') as inpfile:
    for num, line in enumerate(inpfile):
        if name == line.rstrip(r'\n'):
            print num

答案 1 :(得分:1)

问题在于对你的正则表达有所了解。在非专业术语中,您匹配表达式:

“单词边框”后跟“a”后跟另一个“单词边框”

这就是为什么匹配行0(a),2(a + a)等等。 这里,空格和不可打印的字符(行的开头,行尾)和'+'标记单词的结尾

答案 2 :(得分:0)

您不应该使用\b。它将与a+aa+匹配。我想你可能想要^a$