Python3正则表达式遇bad escape \g错误,求匹配亚马逊链接的正确写法
解决Python正则匹配亚马逊链接的错误问题
首先,你的报错sre_constants.error: bad escape \g at position 41是因为正则里的\g是无效转义——Python正则语法里根本没有这个写法,这就是直接触发错误的原因。除此之外,你的正则还有几个逻辑问题,我来一步步帮你修正:
错误分析与修正步骤
- 移除无效的
\g转义:你大概率是想写$(匹配字符串结尾)或者手滑打错了,直接删掉这个错误的转义就能解决报错。 - 替换
re.match为re.search:re.match只会从字符串第一个字符开始匹配,但你的目标链接在字符串中间,必须用re.search(它会扫描整个字符串寻找匹配项)。 - 修正域名后缀的匹配逻辑:
[\b"com","ca"]是字符集写法,会把逗号、引号、单词边界符\b都当成要匹配的单个字符,完全无法匹配"com"或"ca"后缀。正确写法是用分组(com|ca)(如果不需要单独捕获后缀,也可以用非捕获组(?:com|ca))。 - 删掉多余的
\^转义:\^会匹配字面量的^符号,不是你想要的开头锚定(而且你也不需要锚定开头,因为链接在字符串中间),直接移除即可。 - 转义域名中的
.:amazon.里的.在正则中会匹配任意字符,必须转义成amazon\.才能匹配字面量的点号。
修正后的代码示例
这里提供两种版本,根据你的需求选择:
版本1:捕获完整链接、域名后缀和产品路径
import re i = "some string wow https://www.amazon.ca/product-product-name" match_result = re.search(r'https://www.amazon\.(com|ca)(.*)', i) if match_result: print("完整匹配的链接:", match_result.group(0)) # 输出整个链接 print("域名后缀:", match_result.group(1)) # 输出"ca"或"com" print("产品路径:", match_result.group(2)) # 输出后面的/product-product-name
版本2:更严格的链接提取(避免多余内容)
如果你的字符串后面还有其他文本,用\S+匹配非空白字符,确保只提取完整的链接:
import re i = "some string wow https://www.amazon.ca/product-product-name more text here" match_result = re.search(r'https://www.amazon\.(?:com|ca)/\S+', i) if match_result: print("提取到的链接:", match_result.group()) # 仅输出https://www.amazon.ca/product-product-name
额外说明
- 非捕获组
(?:com|ca):如果不需要单独获取域名后缀,用这个可以避免创建不必要的捕获组,小幅提升正则性能。 \S+:匹配任意非空白字符,能有效防止链接提取时包含后面的空格或无关文本。
内容的提问来源于stack exchange,提问作者W. Reyna
相关产品推荐
相关产品推荐

