は、なぜ違っ以下の行為を行います。re.compile(r '[[]]')は何と一致しますか? Pythonのreモジュールで
>>> r = re.compile(r'[][]')
>>> r.findall(r'[]')
['[', ']']
>>> r = re.compile(r'[[]]')
>>> r.findall(r'[]')
['[]']
>>> r.findall(r'][')
[]
は、なぜ違っ以下の行為を行います。re.compile(r '[[]]')は何と一致しますか? Pythonのreモジュールで
>>> r = re.compile(r'[][]')
>>> r.findall(r'[]')
['[', ']']
>>> r = re.compile(r'[[]]')
>>> r.findall(r'[]')
['[]']
>>> r.findall(r'][')
[]
正規表現は "[[]]" "[]" のサブストリングと一致します。最初の式は文字クラスを開始し、最初の式はそれを終了します。クラスには文字([)が1つしかありません。それに続けて2番目の文字()を付ける必要があります。したがって、表現は "["の後ろに "]"のいずれかの文字です。
ありがとう、それは本当に役立ちます。 – gray
文字クラス[
で始まり、最初の]
で終わる。
ように、発現[][]
は、文字クラスなどの文字]
と[
付き文字クラスであります空であってはなりません:[
][
]
と表現[[]]
はその後ちょうど[
付き文字クラスと単一の文字]
次のとおりです。]
]
[
[
私は例のコードにわずかな変更を行った(文字列を移動しますs = ".."からfindallの引数に一致するので、少しはっきりしています)、[] []と[[]]は異なる結果を生成することを指摘しています。また、タグからPythonタグを削除しました。 – dbrPythonの重要な情報です。正規表現のフレーバは、文字クラスの角括弧で扱う方法によって大きく異なります。 Javaでは、これらの正規表現の両方がPatternSyntaxExceptionsになります。 –