基于正则表达式从多格式文本语料中提取Name标签值的方法
姓名提取正则实现方案
直接用以下正则即可覆盖全部4种场景,不需要硬编码按空格截断:
/Name\s*:?\s*(.*?)(?=\s*(?:Date|Age)\s*:?|$)/i
正则逻辑说明
Name\s*:?\s*:精准定位Name标签,兼容标签后带任意空白、有无冒号的情况,覆盖带冒号、无冒号两种格式(.*?):非贪婪模式捕获Name标签后的内容,不管是单名还是带姓氏的全名都能完整抓取,不会漏取多段姓名(?=\s*(?:Date|Age)\s*:?|$):通过正向预查定义抓取终止边界:要么遇到下一个相邻的固定字段(Date/Age,同样兼容字段前带空白、有无冒号的情况),要么到字符串末尾,不管Name出现在字符串哪个位置都能正确截断,不会把后续字段的内容混入姓名结果
场景验证
对应列出的4种测试输入,取正则第一个捕获组的结果完全符合预期:
- 输入
Name: ABC Def Date: 8-01-09 Age: 5,输出ABC Def - 输入
Name: Abc Date: 8-01-09 Age: 5,输出Abc - 输入
Name ABC Date 8-01-09 Age 5,输出ABC - 输入
Date 8-01-09 Name ABC DEF Age 5,输出ABC DEF
如果后续新增其他和Date、Age同级的固定字段,直接把字段名加到正则中(?:Date|Age)的分组里即可,不需要调整整体匹配逻辑。
内容的提问来源于stack exchange,提问作者featherweight
相关产品推荐
相关产品推荐

