请求编写正则表达式提取'approv'类关键词后的首个词汇
提取审批人名称的正则解决方案
看来你是想从文本里抓出审批人的名字,但之前的正则没踩对路子,我来给你调整一下。
首先,先给你能直接用的正则:
(?i)\bapprov\w*\b\W+(\w+)
为什么这个能work?我拆开来给你解释:
(?i):开启不区分大小写模式,这样不管是approved、Approver还是approval都能匹配到,不用写一堆大小写组合。\bapprov\w*\b:匹配以approv开头的完整单词(比如approved、approver、approval),\b是单词边界,防止匹配到包含approv的其他长单词,\w*用来匹配approv后面的任意字母。\W+:匹配关键词后面的非单词字符(空格、冒号、破折号这些分隔符),确保跳过这些符号,直接定位到后面的名字。(\w+):捕获组,用来提取后面的第一个单词(也就是审批人的名字),\w+匹配任意长度的字母数字组合,不会像你之前的正则那样限制长度。
对比一下你之前的问题:
你写的\bApprov*\b([\w][A-Za-z]{4-7})有几个问题:
Approv*这里的*是重复前面的v,不是匹配任意字符,所以只能匹配Appro、Approv、Approvv这类,匹配不到approved或者approval。[\w][A-Za-z]{4-7}限定了名字的长度在5-8个字符之间,但你的示例里spiderman是8个字母刚好,要是遇到更长或更短的名字就会匹配失败,完全没必要加这个限制。- 没有处理关键词和名字之间的分隔符(比如冒号
:、破折号-),导致正则可能直接卡在这些符号上,抓不到名字。
测试你的示例数据:
用这个正则跑你的4行数据,能精准抓到:
- 行1:
thors - 行2:
Wanda - 行3:
spiderman - 行4:
ironman
如果你的审批人名字可能包含连字符或者点(比如Mary-Ann),可以把(\w+)改成([\w-]+)来适配,根据你的实际数据调整就行。
内容的提问来源于stack exchange,提问作者S F
相关产品推荐
相关产品推荐

