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

Python 正则表达式只打印第一个字符,python,regex,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.matc

不是打印整个“最后”句子,而是只打印“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\\"\\;]')

Found p

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

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\";'
#       ^        ^^^      ^^^        ^^^^^        ^^^      ^^^      ^
第二行上的carret显示了更改。首先,您不需要转义
=
,而且您可以指定
\n
,Python将其视为新行字符,但您希望匹配
\n
(两个字符),因此您需要避开反斜杠,因此
\\n
;最后您忘记了冒号前面有三个单词(


你可以用这个测试和修改你的正则表达式。

你的范围只匹配1个字符。考虑在关闭括号之后添加<代码> +代码>…也考虑原始前缀以避免反斜杠的加倍…@ JeN弗兰Cou.OISFabRe:我想他的意图不是在定义一个字符组。你不需要逃避<代码> < <代码> > <代码>:和
=
chars。这让表达更清晰了…@Jean-Françoisfar:OP也忘了转义``所以正则表达式不匹配,我正在开发一个改进的版本。正则表达式101帮助解决了这个问题。感谢大家的回复。