Python3使用re.findall提取HTML中JS变量正则匹配失败求助
正则匹配失败原因及解决方案
场景1匹配失败原因
- 正则语法中
+属于特殊量词,代表匹配前一个字符1次及以上,你需要匹配代码里字面量的加号,必须转义为\+ - 不需要对双引号做多余的转义,Python原始字符串中直接写
"即可匹配字符串中的双引号 - 修正后的正则写法:
pattern = r'var j = i \+ Number\("(\d*)" \+ "(\d*)"\);'
运行后输出为[('6876', '52907')],符合预期。
场景2匹配失败原因
- 你使用的
\w元字符仅匹配大小写字母、数字和下划线,目标字符串包含/、+等不在\w范围内的特殊字符,因此匹配失败 - 匹配双引号包裹的任意内容时,使用
[^"]*(匹配所有非双引号的字符)是更通用的写法,不会受特殊字符限制 - 修正后的正则写法:
pattern = r'"bm-foo": "([^"]*)",'
运行后输出为['AAQAAAAE/////4ytkgqq/oWI'],符合预期。
额外注意事项
- 正则中的特殊字符包括
+、*、?、.、(、)、[、]等,要匹配这些字符的字面量必须加反斜杠转义 - 提取固定分隔符(如双引号、单引号)包裹的内容时,优先用
[^分隔符]*的写法,可避免贪婪匹配越界的问题
内容的提问来源于stack exchange,提问作者Athena Wisdom
相关产品推荐
相关产品推荐

