3

明確にするために正規表現を複数の行に分割したいのですが、生の文字列を使用するのが最善の方法かわかりません。

SECT_EXP = (
    r'^(?P<number>.+?[.]? {1,2}'  # Begin number pattern match
    r'(?P<sect_num>'  # Begin section number match
    r'(?P<full_num>'  # Begin full number match
    r'(?P<title>\d{1,2}?)'  # Match title substring
    r'(?P<chapter>\d{2})'  # Match chapter substring
    r')'  # End full number match
    r'[.]'
    r'(?P<section>\d+)'  # Match section substring
    r')'  # End section number match
    r')'  # End number pattern match
    r'([.]?)[ ]*$'  # Lazy matching end of strings
)

しかし、暗黙的な行の結合が使用されている場合、すべてが生の文字列として処理されるように、各文字列の前に r を付ける必要がありますか?

4

1 に答える 1

4

このページから:

re.X
re.VERBOSE

このフラグを使用すると、見栄えの良い正規表現を記述できます。パターン内の空白は無視されます。ただし、文字クラス内またはエスケープされていないバックスラッシュが前にある場合、および文字クラス内またはエスケープされていないバックスラッシュが前にない「#」が行に含まれている場合は、そのような「#」の左端からすべての文字が無視されます。 ' 行末までは無視されます。

これは、10 進数に一致する次の 2 つの正規表現オブジェクトが機能的に等しいことを意味します。

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)

b = re.compile(r"\d+\.\d*")

ご覧のとおり、上記のように、'r' プレフィックスを使用してトリプル クォートで囲まれた文字列を使用できます。

于 2014-01-06T17:17:48.027 に答える