我有一个文本文件(例如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等等......
我明白我上面使用的正则表达式是不正确的。但如果您请分享您的意见/建议以编译正则表达式,以便为所有模式提供所需的输出,将会很有帮助。
感谢。
答案 0 :(得分:1)
为什么不打印2和4? a+a
和a+
都包含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+a
,a+
匹配。我想你可能想要^a$
。