使用Python Regex查找2个标签之间的短语

时间:2017-07-06 16:22:13

标签: python regex

我有一个字符串,我想用正则表达式找到两个已知模式之间封装的字符," Cp_6%3A"然后是一些人物"&"可能更多的角色,或没有&而且只是字符串的结尾。

我的代码如下所示:

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

但这不会产生任何想法吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

请注意(\& | $)匹配&字符和后面的空格,或空格和字符串结尾(空格在这里有意义!)。

使用否定字符类[^&]*(除&以外的零个或多个字符)来简化正则表达式(不需要交替组或延迟点匹配模式),然后访问{{1} }:

.group(1)

请注意,def extract_id_from_ref(ref): m = re.search(r"Cp_6%3A([^&]*)", ref) if m: print(m.group(1)) _都不是特殊的正则表达式元字符,也不必转义。

请参阅regex demo

答案 1 :(得分:0)

问题是正则表达式中的空格也被考虑在内。此外,为了向字符串添加退格键,您必须添加\\(两个反斜杠)或使用原始字符串

所以你应该写:

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

如果您匹配:

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

它应该有用。