如何提取指定标点符号后符合规则的目标数字
提取目标数字的实现方案
核心匹配逻辑
目标数字的共有特征可以直接用来过滤无效数字:
- 仅出现在两个位置:整个文本的开头,或者分隔符
|之后的片段开头 - 数字后紧跟英文句号
.,不会出现-等特殊符号
不符合上述特征的234、7-38-030等非目标数字会被自动排除。
方法1:正则表达式实现(推荐)
直接用正则匹配符合规则的数字即可,Python示例代码如下:
import re # 待处理原始文本 raw_text = "3. MANAGEMENT, FOOD EMPLOYEE Comments 234: FOUND NO EMPLOYEE ISSUED. | 5. PROCEDURES FOR RESPONDING TO VOMITING AND DIARRHEAL EVENTS - Comments: | 10. ADEQUATE HANDWASHING SINKS 7-38-030(C), NO CITATION ISSUED. | 47. FOOD & NON-FOOD " # 正则规则:匹配文本开头或|后的连续数字,数字后紧跟. pattern = r'(?:^|\|)\s*(\d+)\.' # 提取结果并转成整数 target_nums = [int(num) for num in re.findall(pattern, raw_text)] print(target_nums) # 输出结果:[3, 5, 10, 47]
方法2:分割文本遍历实现(无正则依赖)
如果不想用正则,可以先按|分割文本,再逐个提取每个片段开头的数字:
raw_text = "3. MANAGEMENT, FOOD EMPLOYEE Comments 234: FOUND NO EMPLOYEE ISSUED. | 5. PROCEDURES FOR RESPONDING TO VOMITING AND DIARRHEAL EVENTS - Comments: | 10. ADEQUATE HANDWASHING SINKS 7-38-030(C), NO CITATION ISSUED. | 47. FOOD & NON-FOOD " target_nums = [] # 按|分割所有内容片段 segments = raw_text.split('|') for seg in segments: # 去掉片段前后的空白字符 seg = seg.strip() current_num = "" # 遍历片段开头的字符,提取连续数字 for char in seg: if char.isdigit(): current_num += char else: break if current_num: target_nums.append(int(current_num)) print(target_nums) # 输出结果:[3, 5, 10, 47]
内容的提问来源于stack exchange,提问作者Yumeng Xu
相关产品推荐
相关产品推荐

