而不是打印整个“最终”句子它只打印“p”。有人可以帮忙吗?
final = r'print "\n^^^###***===TP test result: $final_verdict===***###^^^\n";'
searchObj = re.compile(r'[\w\s\"\n\^\^\^\#\#\#\*\*\*\=\=\=\w+\s\w+\:\s\$\w+\=\=\=\#\#\#\*\*\*\^\^\^\n\"\;]')
print(searchObj)
y=searchObj.match(final)
if y:
print("Found",y.group())
else:
print("Nothing")
结果:
re.compile('[\\w\\s\\"\\n\\^\\^\\^\\#\\#\\#\\*\\*\\*\\=\\=\\=\\w+\\s\\w+\\:\\s\\$\\w+\\=\\=\\=\\#\\#\\#\\*\\*\\*\\^\\^\\^\\n\\"\\;]')
找到了p
答案 0 :(得分:2)
你在正则表达式上放了方括号,这意味着你定义了一个字符组,你应该删除它们:
r'\w\s\"\n\^\^\^\#\#\#\*\*\*\=\=\=\w+\s\w+\:\s\$\w+\=\=\=\#\#\#\*\*\*\^\^\^\n\"\;'
通过使用字符组,您可以说:方括号之间的任何字符。因此[ab]
表示: a
或b
,而非 a
后跟b
。
现在你的字符串不再匹配了(当然,匹配序列比单个字符更难)。但是,您可以将其改进为:
r'\w\s\"\\n\^\^\^###\*\*\*===\w+\s\w+\s\w+:\s\$\w+===\*\*\*###\^\^\^\\n\";'
# ^ ^^^ ^^^ ^^^^^ ^^^ ^^^ ^
第二行的车祸显示了变化。首先,您不需要转义#
和=
,而且您指定了\n
哪个Python看作新换行符,但您希望匹配\n
(两个)因此你需要转义反斜杠,所以\\n
;最后你忘了冒号前有三个单词(:
)。
您可以使用此regex101来测试和修改正则表达式。