簡體   English   中英

如何創建包含變量和注釋的正則表達式?

[英]How do I create a regex that contains a variable and comments?

我想創建一個包含評論和變量的正則表達式。 我以為我會像這樣拆分字符串,但是不起作用:

import re

regex = re.compile(r'''
        ^(sm\d{5}-[a-z]+-\d{2})          # study number''' + 
        doctype               +      r'''# document
        v(\d+)-(\d+)                     # version number
        \.pdf$                           # pdf extension
        ''', re.VERBOSE) 

將您的正則表達式模式分成多個字符串,然后使用"".join()將它們組合成一個字符串,如下所示

import re
pattern = "".join([
    "^(sm\d{5}-[a-z]+-\d{2})",  # study number
    doctype,  # document
    "v(\d+)-(\d+)",  # version number
    "\.pdf$",  # pdf extension
])
regex = re.compile(pattern, re.VERBOSE)

為了避免注釋,您可以在正則表達式的每個部分使用描述性變量名。 這樣,將行定位字符與正則表達式的“業務邏輯”分開以使這些變量更可重用也可能很有意義。

study_number_pattern = "(sm\d{5}-[a-z]+-\d{2})"
version_number_pattern = "v(\d+)-(\d+)"
pdf_extension_pattern = "\.pdf"
pattern = "".join([
    "^",
    study_number_pattern,
    doctype,
    version_number_pattern,
    pdf_extension_pattern,
    "$"
])
regex = re.compile(pattern, re.VERBOSE)

模式的第二行上的連接符號和右引號(''')已與注釋一起注釋掉; 只需將它們移到評論前面即可。
我將兩個加號放在一行上,但是您仍然可以將它們分成多個,這只是我的偏好...

regex = re.compile(r'''
        ^(sm\d{5}-[a-z]+-\d{2})'''   # study number
        + doctype +                  # document
        r'''v(\d+)-(\d+)             # version number
        \.pdf$                       # pdf extension
        ''', re.VERBOSE)

在相關說明中,您是否使用IDE或任何文本編輯器來編寫代碼? 如果沒有,那將很有幫助。 這樣的錯誤會立即被發現並突出顯示。

編輯:
堆棧溢出語法高亮顯示,似乎帶有注釋“版本號”和“ pdf擴展名”的行是上面代碼中模式的一部分,但是使用re.VERBOSE標志使它們成為實際注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM