web-dev-qa-db-ja.com

正規表現split:FutureWarning:split()には空でないパターン一致が必要です

次のようにsplit()コマンドを使用すると、Python 3バージョンで警告が表示されます。

pattern = re.compile(r'\s*')
match = re.split(pattern, 'I am going to school')
print(match)

python3.6/re.py:212:FutureWarning:split()には空でないパターンマッチが必要です。 _compile(pattern、flags).split(string、maxsplit)を返します

この警告が表示される理由がわかりません。

11
pavikirthi

\s*ゼロ以上空白の部分文字列で分割するように要求したパターン

しかし...空の文字列はそのパターンに一致します。空白がゼロだからです!

re.splitはこれで対処する必要があります。これは何 str.splitは:

>>> 'hello world'.split('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: empty separator
>>>

re.splitは、その空の部分文字列オプションを単に破棄することに決め、代わりに1つ以上空白で分割します。 python3.6では、その決定について通知するために、表示されているFutureWarningを出力します。

あなたは*+

$ python3.6 -c "import re; print(re.split('\s*', 'I am going to school'))"
/usr/lib64/python3.6/re.py:212: FutureWarning: split() requires a non-empty pattern match.
  return _compile(pattern, flags).split(string, maxsplit)
['I', 'am', 'going', 'to', 'school']

$ python3.6 -c "import re; print(re.split('\s+', 'I am going to school'))"
['I', 'am', 'going', 'to', 'school']
17
azhrei