我想在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? 谢谢。
答案 0 :(得分:2)
它返回['a1 a2', 'a3 a5']
,因为这些是唯一可以找到的模式:应用第一个模式后,'a1 a2'
部分消失,' a3 a5 a6'
被遗忘。下一个可能的模式是'a3 a5'
,' a6'
会遗留下来,无法进一步匹配。
'a1 a3'
,'a1 a5'
等,因为这种组合不会发生。请记住,您搜索两个任意字符,后跟一个空格字符,后跟两个任意字符。
使用
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))