You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式提取编号后的姓名并避免误匹配?

提取带编号序列的姓名正则方案

给定待处理字符串:

"1. Sachin Deshpande 2. K. Chandra Shekar 3. B. Rupesh 1. Prabhakar Rao 2. Venkata Chary 3. B. Gangadhar"

之前使用的正则(?:[0-9][).])+(\D*)存在误匹配问题,比如会错误提取raj sharma 4) mirror ship中4)后的内容。可以使用以下更精准的正则表达式解决:

(?<!\S)\d[.)]\s*(.*?)(?=\s*(?:\d[.)]|$))

正则各部分说明

  • (?<!\S):负向零宽断言,确保编号(数字+.或))的前面没有非空白字符,保证编号是列表项的起始(要么在字符串开头,要么前面是空格),避免匹配嵌入在文本中间的编号。
  • \d[.)]:匹配列表项的编号格式(数字后接.或))。
  • \s*:匹配编号与姓名之间的任意空白字符。
  • (.*?):非贪婪模式匹配姓名内容,避免过度匹配到后续的列表项。
  • (?=\s*(?:\d[.)]|$)):正向零宽断言,匹配到下一个列表项编号(前置任意空白)或字符串结尾时停止,确保每个姓名只提取到当前项的结尾。

示例代码(Python)

import re

input_str = "1. Sachin Deshpande 2. K. Chandra Shekar 3. B. Rupesh 1. Prabhakar Rao 2. Venkata Chary 3. B. Gangadhar"
name_pattern = r'(?<!\S)\d[.)]\s*(.*?)(?=\s*(?:\d[.)]|$))'
name_list = re.findall(name_pattern, input_str)
print(name_list)

输出结果

["Sachin Deshpande","K. Chandra Shekar","B. Rupesh","Prabhakar Rao","Venkata Chary","B. Gangadhar"]

这个正则只会提取以标准编号格式开头的列表项姓名,不会误匹配嵌入在文本中间的编号内容。

内容的提问来源于stack exchange,提问作者supernova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:00:59