如何编写正则表达式捕获直至并包含11位数字的内容分组?
正则表达式捕获直至并包含11位数字的内容分组
你可以使用带有非贪婪匹配和跨行模式的正则表达式实现需求,具体方案如下:
正则表达式与核心思路
使用正则 (.*?\d{11}),并配合 re.DOTALL 模式(让.匹配换行符):
.*?:非贪婪匹配任意字符,会尽可能少地匹配内容,直到遇到后续的11位数字,避免过度匹配到后面的无关文本。\d{11}:精准匹配11位数字,作为每个捕获分组的终止标记。re.DOTALL:开启后,.可以匹配换行符,确保跨行的文本也能被完整捕获。
代码示例
import re # 目标文本 text = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et doloreere34545 magna aliqua. 1\. Ut enim ad minim 5453 veniam 2\. quis nostrud exercitation ullamco 14567883390 laboris nisi ut aliquip ex ea commodo consequat. 12\. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore 23432434234 eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.""" # 定义正则模式 pattern = r'(.*?\d{11})' # 执行匹配,开启DOTALL模式 matches = re.findall(pattern, text, re.DOTALL) # 输出捕获结果 for idx, match in enumerate(matches, 1): print(f"第{idx}个捕获分组:") print(match) print("-" * 60)
结果说明
运行代码后会得到你需要的两个目标分组,自动忽略11位数字之后的剩余文本。
之前使用正向后顾断言失败的原因是:后顾断言仅用于匹配某个位置的前置内容,无法实现从起始位置(或上一个匹配结束点)到目标标记的完整内容捕获,而非贪婪匹配加跨行模式更贴合你的需求场景。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

