正则表达式问题:匹配限定词间首个目标内容,现有正则失效求解决
正则提取解决方案
问题背景
现有三行文本:
"Received money from SAYLOR SELLY EU S.A.R.L. with reference XXWW025 MENTINUI-NOM 3 654654465/WCX6565223323"
"Card transaction of EUR issued by CaniR* I- CKOUION"
"Card transaction of EUR issued by Suil Flim KL RUIOKE SOR"
需要提取以下目标内容:
- SAYLOR SELLY EU S.A.R.L.
- CaniR* I- CKOUION
- Suil Flim KL RUIOKE SOR
原正则(by|from|to)(.*)(with|\")失效原因:
- 第二、三行无
with或"结尾,无法触发匹配; .*为贪婪匹配,即使第一行能匹配,也会包含with之前的所有冗余内容,不符合提取需求。
可行正则方案
使用非贪婪匹配结合停止条件的正则表达式:
(?:from|by)\s+(.*?)(?:\s+with|$)
正则解释
(?:from|by):匹配目标前缀from或by,非捕获组不占用分组编号;\s+:匹配前缀后的一个或多个空格;(.*?):非贪婪捕获组,提取目标内容,遇到停止条件立即终止;(?:\s+with|$):停止条件,匹配with或者行尾,确保第一行在with前停止,后两行匹配到文本结尾。
代码示例(Python)
import re text_list = [ "Received money from SAYLOR SELLY EU S.A.R.L. with reference XXWW025 MENTINUI-NOM 3 654654465/WCX6565223323", "Card transaction of EUR issued by CaniR* I- CKOUION", "Card transaction of EUR issued by Suil Flim KL RUIOKE SOR" ] pattern = re.compile(r'(?:from|by)\s+(.*?)(?:\s+with|$)') for text in text_list: result = pattern.search(text) if result: print(result.group(1))
输出结果
SAYLOR SELLY EU S.A.R.L. CaniR* I- CKOUION Suil Flim KL RUIOKE SOR
内容的提问来源于stack exchange,提问作者SaukratesK
相关产品推荐
相关产品推荐

