0

セミコロン、空白、カンマの任意の組み合わせで区切られた文字列を分割したいと思います。例えば:

入力:"Jan,Feb;Mar Apr, May;"

出力:["Jan","Feb","Mar","Apr","May"]

split()メソッドは指定したものと完全に一致しますが、これは私が必要としているものではないため、ここでメソッドを単純に使用することはできませんsplit()。誰かがこれを手伝ってくれますか?

4

5 に答える 5

7

使用re.split

>>> [s for s in re.split(r'[ ,;]', '"Jan","Feb";"Mar" "Apr", "May";') if s]
['"Jan"', '"Feb"', '"Mar"', '"Apr"', '"May"']

if s空の文字列を除外します。

于 2013-01-14T19:14:37.007 に答える
3

re.findallここでよさそうだ:

In [168]: strs='"Jan","Feb";"Mar" "Apr", "May";'

In [169]: import re

In [170]: re.findall(r'\w+',strs)
Out[170]: ['Jan', 'Feb', 'Mar', 'Apr', 'May']
于 2013-01-14T19:16:23.650 に答える
2

通常、正しい答えは正規表現ですが、この特定の問題をメソッドとで解決できる場合があります。splitreplace

>>> s = "one two,three;four"
>>> s.replace(',',' ').replace(';',' ').split()
['one', 'two', 'three', 'four']

私は、 Ashwini のソリューションが最適だと思います。すべての分離クラッドを削除しようとするのではなく、有用なコンテンツを検索するだけです。

于 2013-01-14T19:16:48.843 に答える
1

str.translate続いて使用するエレガントな非正規表現ソリューションもありますstr.split

>>> in_str = '"Jan","Feb";"Mar" "Apr", "May";'
>>> in_str.translate(None,",; ")[1:-1].split("\"\"")
['Jan', 'Feb', 'Mar', 'Apr', 'May']
于 2013-01-14T19:19:17.957 に答える
0

これを試してください:

import re

c = b'"Jan","Feb";"Mar" "Apr", "May"';
needle = r'("[^, ;]*")'
r = re.compile(needle)

months = r.findall(c)
print months
于 2013-01-14T19:16:16.843 に答える