46

Pythonの生の文字列について少し混乱しました。'\'生の文字列を使用すると、通常のバックスラッシュとして扱われることがわかっていr'\n'ます(例: \and n)。ただし、生の文字列で改行文字を一致させたい場合はどうすればよいか疑問に思っていました。試してみr'\\n'ましたが、うまくいきませんでした。

誰かがこれについて良い考えを持っていますか?

4

4 に答える 4

41

正規表現では、複数行モードであることを指定する必要があります。

>>> import re
>>> s = """cat
... dog"""
>>> 
>>> re.match(r'cat\ndog',s,re.M)
<_sre.SRE_Match object at 0xcb7c8>

(生の文字列)を改行にre変換することに注意してください。\nコメントで示したように、実際に一致させる必要 re.Mはありませんが、一致させたり$^より直感的にするのに役立ちます。

>> re.match(r'^cat\ndog',s).group(0)
'cat\ndog'
>>> re.match(r'^cat$\ndog',s).group(0)  #doesn't match
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r'^cat$\ndog',s,re.M).group(0) #matches.
'cat\ndog'
于 2013-02-04T15:22:51.010 に答える
14

最も簡単な答えは、生の文字列を使用しないことです。を使用すると、円記号をエスケープできます\\

一部のセグメントに大量のバックスラッシュがある場合は、必要に応じて生の文字列と通常の文字列を連結できます。

r"some string \ with \ backslashes" "\n"

(Pythonは、文字列リテラルを空白のみで自動的に連結します。)

Windowsでパスを使用している場合、最も簡単なオプションはスラッシュを使用することです。それでも問題なく機能します。

于 2013-02-04T15:06:24.643 に答える
1

[\r\n] を使用して改行に一致させることもできます

于 2018-11-06T11:41:25.513 に答える