1

誰かこれに答えてくれませんか? reg 式 (re) モジュールを学習しようとしていますが、これについて頭を悩ませることができません。3つのファイル名形式すべてをキャッチするために正規表現を考え出そうとしています

パイソン 3.4.3

>>> re.findall("file[\_-]1","file-1 file_1, file\1")
['file-1', 'file_1']
>>> 

file\1 をキャッチしないのはなぜですか?? 他の2つのパターンを試しましたが、どちらも機能しませんでした:(

1. re.findall("file[\\_-]1","file-1 file_1, file\1")
2. re.findall(r"file[\_-]1","file-1 file_1, file\1")

ありがとう、サーガル

4

1 に答える 1

1

バックスラッシュは正規表現でも意味があります。just は、アンダースコアやバックスラッシュではなく\_、文字通りのアンダースコアを意味します。代わりに、 (生の Python 文字列)(正規表現のリテラル バックスラッシュ)が必要です。検索しようとしている文字列も生のリテラルである、バックスラッシュが 2つある必要があることに注意してください。r'...' \\

>>> "file-1 file_1, file\1"
'file-1 file_1, file\x01'  # probably not what you expected...
>>> r"file-1 file_1, file\1"
'file-1 file_1, file\\1'

したがって、次を使用できます。

>>> re.findall(r"file[\\_-]1", r"file-1 file_1, file\1")
        # note ^       ^       ^
['file-1', 'file_1', 'file\\1']
于 2015-07-21T09:47:07.320 に答える