如何用Python正则表达式匹配单行内的多个数字?
问题:匹配文本中所有独立的1-2位数字
原代码仅能匹配每行开头的1-2位数字,无法捕获同一行内的后续数字,且未排除被字母包裹的长数字。需求是提取所有独立的1-2位数字(如同一行的1 2需全部匹配,G3434343中的数字需忽略)。
原代码问题分析
原正则^\d{1,2}配合re.MULTILINE模式,仅匹配每行开头的1-2位数字,因此同一行内非行首的数字(如第一行的2)无法被捕获,不符合需求。
正确解决方案
使用匹配独立1-2位数字的正则表达式,确保数字前后为非单词字符(空白、行首/行尾),避免匹配长数字的一部分或被字母包裹的数字:
代码示例
import re lines = ''' 1 2 3 4 G3434343 ''' # 匹配独立的1-2位数字,\b表示单词边界 matches = re.findall(r'\b\d{1,2}\b', lines) print(matches) # 输出: ['1', '2', '3', '4']
验证第二个示例输入
输入:
8 9 11 15 G54444
运行上述代码,输出为['8', '9', '11', '15'],完全符合期望。
正则说明
\b:单词边界,确保数字前后不是字母、数字或下划线(即数字是独立的,不是长数字或带前缀的数字的一部分)\d{1,2}:匹配1到2位的数字- 无需
re.MULTILINE模式,因为我们要捕获所有符合条件的数字,而非仅行首的数字
内容的提问来源于stack exchange,提问作者MichaelT444
相关产品推荐
相关产品推荐

