2

我想在 python 中找到所有 2 个单词的字符串。我创建了这个:

#!/usr/bin/python
import re

string='a1 a2 a3 a5 a6'
search=re.findall('.. ..',string)
print len(search)
for nk in search:
        print nk

我得到:a1 a2 a3 a5 虽然我想要:a1 a2,a2 a3,a3 a5,... 等等 findall 应该搜索所有可能的模式?为什么返回 a1 a2,a3 a5?谢谢你。

4

1 回答 1

2

它返回['a1 a2', 'a3 a5'],因为这些是唯一可以找到的模式:在应用第一个模式后,该'a1 a2'部分消失并' a3 a5 a6'留下。下一个可能的模式是'a3 a5', 并且' a6'被留下并且不能进一步匹配。

'a1 a3''a1 a5'无法找到,因为这种组合不会发生。请记住,您搜索两个任意字符,然后是一个空格字符,然后是 2 个任意字符。

r=re.compile(r"(\S{2})(?:\s|$)")
pairs =r.findall("a1 a2 a3 a5 a6")

或者

pairs = re.findall(r"(\S{2})(?:\s|$)", "a1 a2 a3 a5 a6")

您会发现所有 2 字符组合,它们后跟空格或字符串末尾:['a1', 'a2', 'a3', 'a5', 'a6']. 如果你结合这些,你会发现所有可能的组合:

for ifirst in range(len(pairs) - 1):
    for second in pairs[ifirst + 1:]:
        print " ".join((pairs[ifirst], second))
于 2012-11-29T19:52:14.667 回答