43

少なくとも 2 つ以上の空白がある場所でのみ文字列を分割したいと考えています。

例えば

str = '10DEUTSCH        GGS Neue Heide 25-27     Wahn-Heide   -1      -1'
print str.split()

結果:

['10DEUTSCH', 'GGS', 'Neue', 'Heide', '25-27', 'Wahn-Heide', '-1', '-1']

次のようにしたいと思います。

['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1']
4

4 に答える 4

76
In [4]: import re    
In [5]: text = '10DEUTSCH        GGS Neue Heide 25-27     Wahn-Heide   -1      -1'
In [7]: re.split(r'\s{2,}', text)
Out[7]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1']

2021年以降の回答を更新します。

str.split分割する正規表現を受け入れるようになりました。

ここでもっと読む

row = '10DEUTSCH        GGS Neue Heide 25-27     Wahn-Heide   -1      -1'
df = pd.DataFrame({'string' : row},index=[0])

print(df)
                                              string
0  10DEUTSCH        GGS Neue Heide 25-27     Wahn...

df1 = df['string'].str.split('\s{2,}',expand=True)
print(df1)

           0                     1           2   3   4
0  10DEUTSCH  GGS Neue Heide 25-27  Wahn-Heide  -1  -1
于 2012-10-12T20:30:20.823 に答える
9

指摘されているようstrに、文字列に適した名前ではないため、words代わりに次を使用します。

output = [s.strip() for s in words.split('  ') if s]

.split(' ') -- 2 つのスペースを使用すると、空の文字列と、末尾/先頭に空白がある項目を含むリストが得られます。リスト内包表記はそのリストを反復処理し、空白以外の項目 ( if s) を保持し、.strip() が先頭/末尾の空白を処理します。

于 2012-10-12T20:33:41.837 に答える
5
In [30]: strs='10DEUTSCH        GGS Neue Heide 25-27     Wahn-Heide   -1      -1'

In [38]: filter(None, strs.split("  "))

Out[38]: ['10DEUTSCH', 'GGS Neue Heide 25-27', ' Wahn-Heide', ' -1', '-1']

In [32]: map(str.strip, filter(None, strs.split("  ")))

Out[32]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1']

Python 3 では、filterandの結果をラップmaplistて反復を強制します。

于 2012-10-12T20:33:43.377 に答える