如何使用正则表达式匹配以预定义字符首尾的字符串的首次及第二次出现
正则匹配指定次序公司名称解决方案
非贪婪匹配失效原因
- 未限定匹配范围:如果没有锚定每个公司名前的固定特征
Name:,非贪婪匹配的边界没有被限制,会直接匹配到最后一个符合规则的公司名 - 匹配字符范围错误:
.默认无法匹配换行符,如果你需要跨多行匹配内容时用了.代替可以匹配全字符的[\s\S](或开启dotall模式),非贪婪匹配不会跳过换行内容,自然达不到预期效果
匹配首次出现的公司名
直接锚定文本开头的第一个Name字段即可,正则如下:
^\s*Name:\s*([A-Za-z\s]+S\.R\.L)
默认未开启多行匹配的情况下,^只会匹配整个文本的起始位置,捕获组返回的结果就是首个目标公司名EuroPayment Services S.R.L。
匹配第二次出现的公司名
有两种常用实现方案:
- 直接跳过第一个
Name字段及中间内容,锚定第二个Name字段匹配,正则如下:
^[\s\S]*?Name:[\s\S]*?Name:\s*([A-Za-z\s]+S\.R\.L)
[\s\S]可以匹配包括换行在内的所有字符,非贪婪匹配两次Name标识后,捕获组返回的就是第二个目标公司名General Motors S.R.L。
2. 开启全局匹配模式,用正则\s*Name:\s*([A-Za-z\s]+S\.R\.L)匹配所有符合规则的结果,取返回数组的第2个元素即可。
待匹配测试文本参考
Name: EuroPayment Services S.R.L. Address: Str. Ion Cămpineanu, nr. 11, Bloc Union, etaj 8, camera 803 Name: General Motors S.R.L. Address: Str. Ion Cămpineanu, nr. 11, Bloc Union, etaj 8, camera 803
内容的提问来源于stack exchange,提问作者shAkur
相关产品推荐
相关产品推荐

