2017-07-06 29 views
1

我有一個字符串,我想使用正則表達式來查找封裝在兩個已知模式之間的字符,「Cp_6%3A」,然後是一些字符,然後是「&」,可能更多字符,或者沒有&,只是字符串的結尾。使用Python正則表達式找到2個標籤之間的短語

我的代碼如下所示:

def extract_id_from_ref(ref): 
    id = re.search("Cp\_6\%3A(.*?)(\& | $)", ref) 
    print(id) 

但是,這並不產什麼,任何想法?

在此先感謝

+1

引用匹配組... – hwnd

+0

即執行'id.group(0)'或任何你想要的項目。見[這裏](https://docs.python.org/2/library/re.html) – patrick

回答

1

請注意,(\& | $)匹配& 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

0

的問題是,空間的正則表達式模式,也被考慮在內。此外,在以退格添加到字符串,你要麼必須添加\\(兩個反斜槓)或使用原始字符串

所以,你應該寫:

r"Cp_6\%3A(.*?)(?:\&|$)" 

如果再與匹配:

def extract_id_from_ref(ref): 
    id = re.search(r"Cp_6\%3A(.*?)(?:\&|$)", ref) 
    print(id) 

它應該工作。

相關問題