正規表現に基づいて文字列を分割する


143

コマンドの出力を表形式で持っています。この出力を結果ファイルから解析して文字列に格納しています。1行の各要素は1つ以上の空白文字で区切られているため、正規表現を使用して1つ以上のスペースを照合し、分割しています。ただし、すべての要素の間にスペースが挿入されています。

>>> str1="a    b     c      d" # spaces are irregular
>>> str1
'a    b     c      d'
>>> str2=re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!!

これを行うより良い方法はありますか?

各分割の後str2、リストに追加されます。


1
私はこの質問に反対票を投じました。理由は、質問自体は関連していますが、指定された例は要求されたソリューションを実際に必要とするほど難しくないためです。たとえば、単語のブロック、数字のブロックがあり、それらを異なる変数に分割する場合は、正規表現が必要です。
erikbwork 2018

私は、結果の文字列に不要なスペースの項目を削除したい@erikbwork'str2'
user2763554

1
はい、単純にを使用してそれを実現できますstr1.split()。正規表現は必要ありません。
erikbwork 2018年

回答:


176

使用することにより()あなたは単にあなたがこの問題を持っていませんそれらを削除した場合、あなたは、グループをキャプチャしています。

>>> str1 = "a    b     c      d"
>>> re.split(" +", str1)
['a', 'b', 'c', 'd']

ただしstr.split、区切り文字を指定せずに正規表現を使用する必要はなく、空白でこれを分割します。この場合、これが最善の方法です。

>>> str1.split()
['a', 'b', 'c', 'd']

正規表現が本当に必要な場合は、これを使用できます('\s'空白を表し、より明確です):

>>> re.split("\s+", str1)
['a', 'b', 'c', 'd']

または、空白以外のすべての文字を見つけることができます

>>> re.findall(r'\S+',str1)
['a', 'b', 'c', 'd']

4
単純にする。str.split間違いなく最高です:D
jamylak

withspaceで開始および終了する文字列がある場合、これをどのように使用できますか?例: 'abc de'。このため、出力は次のようになります['', 'a', 'b', 'c', 'de', '']
Rakholiya Jenish '19 / 06/19

@RakholiyaJenishstr1.split()
jamylak

@jamylakはstring.split()オプションです。私はそれも正規表現で行うことができるかどうか尋ねていましたか?
Rakholiya Jenish 2015

2
@RakholiyaJenish re.findallオプションは使えませんか?
jamylak


7

を使用re.splitし、分割パターンにキャプチャグループが含まれている場合、グループは出力に保持されます。これが不要な場合は、代わりに非キャプチャグループを使用してください。


2
str.splitあなたの例ではおそらく使用する方が良いでしょう。私はなぜあなたがあなたがする振る舞いを得るのかを説明したかっただけです。
BrenBarn

2

実際はとてもシンプルです。これを試して:

str1="a    b     c      d"
splitStr1 = str1.split()
print splitStr1

2
これを+1しますが、醜いセミコロンを使用しています。
jamylak

3
@jamylak笑 それらを変更します。:) javaとpythonを使用する習慣!
のろわ

1
@ GururajY.S。あなただけのスペースに基づいて分割したい場合は、次のことを行う必要があり、単純に使用stringToSplit.split()
のろわ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.