In [11]: s = 'you and he and she and me'
In [12]: re.findall(r'(?=(?:^|\s)(\w+)\s+and\s+(\w+))', s)
Out[12]: [('you', 'he'), ('he', 'she'), ('she', 'me')]
import regex as re
string = "you and he and she and me"
rx = r'\b(\w+) and (\w+)\b'
matches = re.findall(rx, string, overlapped=True)
print matches
# [('you', 'he'), ('he', 'she'), ('she', 'me')]
您可以使用零宽度正向前瞻,如:
零宽度先行模式以
(?=
开始,最后以)
结束(?:^|\s)
是一个未捕获的组,确保所需的模式位于开头或后跟空格(\w+)\s+and\s+(\w+)
,获得第一和第二捕获组的所需模式示例:
你要的是overlapping regexes。你知道吗
你就是这样做的:
事实上,它在寻找重叠方面做得非常好,您需要我添加的
\b
来表示您想要匹配单词边界。否则你会得到:正如其他人所指出的,你所寻找的是所谓的重叠匹配。} module ,您可以坚持最初的方法并应用另一个标志:
使用较新的^{
提示:您需要在顶部设置单词边界(
\b
),否则会得到意外的结果。你知道吗相关问题 更多 >
编程相关推荐