2

複数のスペースで区切られた文字列を分割しようとしています。

    string1 = "abcd    efgh   a. abcd   b efgh"
    print re.findall(r"[\w.]+") 

予想通り、結果は次のとおりです。

    ['abcd', 'efgh', 'a.', 'abcd', 'b', 'efgh']

ただし、「a」をグループ化したいと思います。と 'abcd' を同じグループに、'b' と 'efgh' を同じグループにします。したがって、私が望む結果は次のようになります。

    ['abcd', 'efgh', 'a. abcd', 'b efgh']

現在の私のアプローチは、2 種類の表現を作成することです。'abcd' と 'efgh' など、スペースのない正規表現を最初に処理します。1 つのスペースを持つものを処理する 2 番目。つまり、「a.」+ 'abcd'.

したがって、r'[\w]+ が最初のタイプを処理でき、r'[\w]+ [\w]+ が 2 番目のタイプを処理できる場合。しかし、「|」を使用してそれらを同じ式に結合する方法がわかりません。

いつものように、他のアプローチは大歓迎です。そして、お時間をありがとう!

4

2 に答える 2

8
result = [s.strip() for s in string1.split('  ') if s.strip()]

つまり、 2 つのスペースで分割し、余分なスペースを結果から削除します (strip を使用)。

于 2013-09-08T08:28:31.310 に答える
4

を使用する場合はre.findall、次の式を使用できます。

>>> string1 = "abcd    efgh   a. abcd   b efgh"
>>> print re.findall(r"\S+(?:\s\S+)*", string1)
['abcd', 'efgh', 'a. abcd', 'b efgh']

(?:\S+(?:\s\S+)*)非スペース文字の後に単一のスペースが続き、複数の非スペース文字が存在する場合は複数回検索されるため、これも機能します。

>>> string1 = "abcd    efgh   a. abcd   b efgh ijkl"
>>> print re.findall(r"\S+(?:\s\S+)*", string1)
['abcd', 'efgh', 'a. abcd', 'b efgh ijkl']

それ以外の場合は、2 つ以上のスペースで分割する方がはるかに簡単です。

>>> string1 = "abcd    efgh   a. abcd   b efgh ijkl"
>>> print re.split(r"\s{2,}", string1)
['abcd', 'efgh', 'a. abcd', 'b efgh ijkl']
于 2013-09-08T08:59:55.497 に答える