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,... etc 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 つの任意の文字、その後にスペース文字、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")

wither の後にスペースまたは文字列の末尾が続く 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 に答える