re.findall不正确输出组



我试图在字符串中" di di di di di di di di di di dip"之后获取所有文本。但是我只是在" dos"一词之后收到第一个字母..

string=str("does he like") 
A=re.findall(r'^doess([w+s+])',string ,re.IGNORECASE)
for tuple in A:
    print tuple[0]

该代码的输出仅给出" H",但我想要"他喜欢"。谁能看到我的代码怎么了?可能有一种更简单的方法,但我想使用re.findall的东西。我是Python的新手,并且要在此网站上发布。

哦,这是python 2.7。

尝试一下。这捕获了整个字符串,但使用组(1(使用tuple [0]用" dod"之后的每个单词。

A = re.findall(r'^does (.*)', string ,re.IGNORECASE)

希望这会有所帮助!

您可以尝试一下:

r'(?<=doess)([ws-]+)'

REGEX101的试验#1

does之后的所有字母,破折号,空格和数字匹配,直到?.

等特殊字符

如果您想要所有内容在单词does之后,请使用以下方式:

r'(?<=doess)(.+)'

REGEX101的试用#2

正则 -

(?<=doess)是一个积极的外观,可确保匹配之前"做"。和一个空间。

[ws-]+匹配一或寄出的字母,数字,空格或破折号。

这是上述言论的完整摘要。

您有两个问题。首先是[]匹配给定组中的一个字符。您要求一个单词,空间或加号。第二个是,当您只有一个捕获组时,findall会返回一个字符串,而不是元组。将加号移出角色组并直接使用匹配的字符串。

import re
string=str("does he like") 
A=re.findall(r'^doess([ws]+)',string ,re.IGNORECASE)
for foo in A:
    print foo

尝试以下:

import re
s = "does he like"
p = re.compile(r"[^does(n't)?].+")
print(''.join(p.findall(s, re.IGNORECASE)))

或此,如果您只需要he likes

r's.+'

最新更新