正则表达式仅打印第一个字符

时间:2017-01-19 15:20:46

标签: python regex

而不是打印整个“最终”句子它只打印“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

1 个答案:

答案 0 :(得分:2)

你在正则表达式上放了方括号,这意味着你定义了一个字符组,你应该删除它们:

r'\w\s\"\n\^\^\^\#\#\#\*\*\*\=\=\=\w+\s\w+\:\s\$\w+\=\=\=\#\#\#\*\*\*\^\^\^\n\"\;'

通过使用字符组,您可以说:方括号之间的任何字符。因此[ab]表示: ab ,而非 a后跟b

现在你的字符串不再匹配了(当然,匹配序列比单个字符更难)。但是,您可以将其改进为:

r'\w\s\"\\n\^\^\^###\*\*\*===\w+\s\w+\s\w+:\s\$\w+===\*\*\*###\^\^\^\\n\";'
#       ^        ^^^      ^^^        ^^^^^        ^^^      ^^^      ^

第二行的车祸显示了变化。首先,您不需要转义#=,而且您指定了\n哪个Python看作新换行符,但您希望匹配\n(两个)因此你需要转义反斜杠,所以\\n;最后你忘了冒号前有三个单词(:)。

您可以使用此regex101来测试和修改正则表达式。