我有一個字符串,我想使用正則表達式來查找封裝在兩個已知模式之間的字符,「Cp_6%3A」,然後是一些字符,然後是「&」,可能更多字符,或者沒有&,只是字符串的結尾。使用Python正則表達式找到2個標籤之間的短語
我的代碼如下所示:
def extract_id_from_ref(ref):
id = re.search("Cp\_6\%3A(.*?)(\& | $)", ref)
print(id)
但是,這並不產什麼,任何想法?
在此先感謝
我有一個字符串,我想使用正則表達式來查找封裝在兩個已知模式之間的字符,「Cp_6%3A」,然後是一些字符,然後是「&」,可能更多字符,或者沒有&,只是字符串的結尾。使用Python正則表達式找到2個標籤之間的短語
我的代碼如下所示:
def extract_id_from_ref(ref):
id = re.search("Cp\_6\%3A(.*?)(\& | $)", ref)
print(id)
但是,這並不產什麼,任何想法?
在此先感謝
請注意,(\& | $)
匹配&
char及其之後的空格,或空格和字符串的結尾(這些空格在此處有意義!)。
使用否定的字符類[^&]*
(零個或多個字符比&
其他)來簡化正則表達式(不需要的交替組或懶惰點匹配圖案),然後訪問.group(1)
:
def extract_id_from_ref(ref):
m = re.search(r"Cp_6%3A([^&]*)", ref)
if m:
print(m.group(1))
注意_
和%
都不是特殊的正則表達式元字符,並且不必轉義。
查看regex demo。
的問題是,空間的正則表達式模式,也被考慮在內。此外,在以退格添加到字符串,你要麼必須添加\\
(兩個反斜槓)或使用原始字符串:
所以,你應該寫:
r"Cp_6\%3A(.*?)(?:\&|$)"
如果再與匹配:
def extract_id_from_ref(ref):
id = re.search(r"Cp_6\%3A(.*?)(?:\&|$)", ref)
print(id)
它應該工作。
引用匹配組... – hwnd
即執行'id.group(0)'或任何你想要的項目。見[這裏](https://docs.python.org/2/library/re.html) – patrick