正则表达式匹配求助:提取含美元金额的ed结尾目标短语
正则表达式调整方案
问题分析
你当前使用的正则(?=[^;]*$)\w+ed (.+) \((\$\d{1,3}(.\d{2})?)\)中,(?=[^;]*$)是正向预查断言行尾前无分号,但第三行目标内容后存在;及后续文本,导致断言不成立,匹配失败。
调整后的正则表达式
(?:\*|;)\s*(\w+ed .*? \(\$\d+(?:\.\d{2})?\))(?=;|$)
正则各部分说明
(?:\*|;):匹配目标内容前的起始标记(*或;),用非捕获组避免生成多余分组\s*:匹配标记与目标内容之间的任意空白字符(兼容空格或换行)(\w+ed .*? \(\$\d+(?:\.\d{2})?\)):捕获目标内容的核心分组\w+ed:匹配以ed结尾的动词(符合你定义的首词特征).*?:非贪婪匹配中间文本,避免过度匹配到后续分号后的内容\(\$\d+(?:\.\d{2})?\):匹配带括号的美元金额,支持整数(如$8)和两位小数(如$6.95)格式
(?=;|$):正向预查目标内容的结束位置,允许后面是分号或行尾,完美适配第三行的场景
匹配验证
该正则可精准提取所有行的目标内容:
- 第1行:
picked up some money ($20) - 第2行:
purchased an apple pie ($6.95) - 第3行:
grabbed some burritos ($8) - 第4行:
installed some plumbing ($23)
内容的提问来源于stack exchange,提问作者recursivedelete
相关产品推荐
相关产品推荐

