セミコロン、空白、カンマの任意の組み合わせで区切られた文字列を分割したいと思います。例えば:
入力:"Jan,Feb;Mar Apr, May;"
出力:["Jan","Feb","Mar","Apr","May"]
split()
メソッドは指定したものと完全に一致しますが、これは私が必要としているものではないため、ここでメソッドを単純に使用することはできませんsplit()
。誰かがこれを手伝ってくれますか?
使用re.split
:
>>> [s for s in re.split(r'[ ,;]', '"Jan","Feb";"Mar" "Apr", "May";') if s]
['"Jan"', '"Feb"', '"Mar"', '"Apr"', '"May"']
if s
空の文字列を除外します。
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']
通常、正しい答えは正規表現ですが、この特定の問題をメソッドとで解決できる場合があります。split
replace
>>> s = "one two,three;four"
>>> s.replace(',',' ').replace(';',' ').split()
['one', 'two', 'three', 'four']
私は、 Ashwini のソリューションが最適だと思います。すべての分離クラッドを削除しようとするのではなく、有用なコンテンツを検索するだけです。
str.translate
続いて使用するエレガントな非正規表現ソリューションもありますstr.split
>>> in_str = '"Jan","Feb";"Mar" "Apr", "May";'
>>> in_str.translate(None,",; ")[1:-1].split("\"\"")
['Jan', 'Feb', 'Mar', 'Apr', 'May']
これを試してください:
import re
c = b'"Jan","Feb";"Mar" "Apr", "May"';
needle = r'("[^, ;]*")'
r = re.compile(needle)
months = r.findall(c)
print months