2017-07-06 68 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) 

它应该工作。

相关问题