特定の文字を使用してPythonで文字列を分割する

Splitting strings in Python using specific characters


質問 written by hugomg @2011-11-20 18:36:31Z

: 2 : 3 : 21

入力したドキュメントを特定の文字で分割しようとしています。 [と]でそれらを分割する必要がありますが、これを理解するのに苦労しています。

def main():
for x in docread:
    words = x.split('[]')
    for word in words:
        doclist.append(word)

これは、それらをリストに分割するコードの一部です。 ただし、ドキュメントの各行を返しています。

たとえば、変換したい

['I need to [go out] to lunch', 'and eat [some food].']

['I need to', 'go out', 'to lunch and eat', 'some food', '.']

ありがとう!

コメント 1

入力として使用しているサンプル行を提供できますか?

written by マフムードアブデルカダー @2011-11-20 18:33:23Z

回答 1 written by Greg Hewgill @2011-11-20 18:34:41Z
6

代わりにre.split()を使用してみてください。

>>> import re
>>> re.split(r"[\[\]]", "I need to [go out] to lunch")
['I need to ', 'go out', ' to lunch']

奇妙な正規表現[\[\]]は、 [または] いずれかで分割することを意味する文字クラスです。 内部\[\]は、 []と同じ文字を使用して文字クラスを囲むため、バックスラッシュでエスケープする必要があります。

回答 2 written by Sven Marnach @2011-11-20 18:58:36Z
2

str.split()は、どの文字でもなく、 渡し正確な文字列で分割します "[]"を渡す"[]"が発生すると分割されますが、個々の括弧では分割されません。 可能な解決策は

  1. 2回分割:

     words = [z for y in x.split("[") for z in y.split("]")] 
  2. re.split()を使用します。

コメント 1

最初のものは機能しましたが、括弧を保持する方法はありますか?

written by user1044868 @2011-11-20 20:29:52Z

回答 3 written by Dmitry B. @2011-11-20 18:38:03Z
0

使用しているstring.split(s)は、「s」のコンテンツ全体をセパレータとして扱います。 言い換えると、あなたの入力は「[] '私は[]外出する必要があります[]外出して昼食をとる必要があります」、「そして[]いくつかの食べ物[]を食べる必要があります。欲しいです。

reモジュールからsplit(s)を使用する必要があります 。これは、sを正規表現として扱います

import re

def main():
for x in docread:
    words = re.split('[]', x)
    for word in words:
        doclist.append(word)