正则表达式如何提取signed by后首个of到句点的目标字符串?
正确正则写法
支持可变长度后行断言的正则引擎(Python re、Java、JavaScript ES2018+等)可直接使用以下规则,匹配结果即为目标内容:
(?<=signed by.*?of )([^.]*)(?=\.)
如果是不支持可变长度后行断言的旧版正则引擎,可使用分组捕获写法,提取第1个捕获组的内容即可:
signed by.*?of ([^.]*)\.
规则拆解
- 原正则的问题是直接从
signed by位置开始捕获,没有定位到要求的of边界,调整后核心逻辑如下:(?<=signed by.*?of )是正向零宽后行断言,用来定位边界:.*?为非贪婪匹配,会尽可能短地匹配字符,保证精准命中signed by之后出现的第一个of(of后带空格,避免把of本身纳入匹配结果)的结束位置,不会跳过靠前的of匹配到后面的内容([^.]*)为捕获组,匹配所有非句点的字符,比非贪婪匹配稳定性更高,不会因为文本特殊结构出现匹配错位(?=\.)是正向零宽先行断言,定位到句点位置,保证匹配到句点前就停止,不会把句点带入结果
- 用你提供的测试字符串验证,最终提取结果为
the National Service of ENCAC,完全符合需求。
内容的提问来源于stack exchange,提问作者Dayana Rodriguez
相关产品推荐
相关产品推荐

