正则匹配排除末尾指定字符 提取HTML页面中符合规则的数字序列
正则调整方案
你之前使用的正则存在两个核心问题:
- 用
$锚定了行尾,只能匹配数字处于整行最末尾的场景,无法匹配数字后接<br>这类非行尾内容的条目 - 负向后顾的写法逻辑不符合排除数字后接
#的需求
调整后的正则
: (\d{4,9})(?![#\d])
规则说明
:匹配目标数字前的固定前缀(\d{4,9})捕获符合长度要求的4-9位连续数字,作为提取结果(?![#\d])负向前瞻约束:捕获的数字后不能紧跟#或者其他数字,既避免截断更长的数字串,也实现了排除末尾带#条目的需求,数字后接换行、HTML标签等其他非#内容均可正常匹配
调用示例
import re input_str = """test: 11111### test: 222222 test: 3333333<br>""" res = re.findall(r': (\d{4,9})(?![#\d])', input_str) print(res) # 输出:['222222', '3333333']
内容的提问来源于stack exchange,提问作者imandy
相关产品推荐
相关产品推荐

