我有一个字符串,我想用正则表达式找到两个已知模式之间封装的字符," Cp_6%3A"然后是一些人物"&"可能更多的角色,或没有&而且只是字符串的结尾。
我的代码如下所示:
def extract_id_from_ref(ref):
id = re.search("Cp\_6\%3A(.*?)(\& | $)", ref)
print(id)
但这不会产生任何想法吗?
提前致谢
答案 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)
它应该有用。