我需要从字符串中提取标题,位置和价格:
10' Starcraft pop up camper (Newport) $5500
哪些是明显的。
但是,也有这样的情况:
10' (approx.) Starcraft pop up camper (Drigg's Town, PA) $5500
_
当我使用简单的正则表达式时,我可以正确匹配第一个字符串,但不能匹配第二个字符串:
^(?<title>.+?) \((?<area>.+?)\) \$(?<price>[\d]+)$
_
我很确定前瞻/后退可以解决这个问题,但我不知道如何处理。有人可以帮我解释一下吗? (也许可以参考一篇关于这个主题的易读文章。)
答案 0 :(得分:4)
只有2个例子,我能建议的最好的方法是将惰性量词改为title
捕获组的贪心量词:
^(?<title>.+) \((?<area>.+?)\) \$(?<price>[\d]+)$
^^
Here
有效地,area
捕获组中的模式现在将捕获最后一个括号内的文本 ()
(前提是后跟可与{匹配的文本) {1}}捕获组。)
price
中的贪婪量词消耗尽可能多的文本,并强制title
捕获组采取尽可能最大的匹配。
另一种方法是确保area
捕获组中的子模式不包含area
:
()
我也删除了延迟量词,因为它是多余的。只有一种方法可以匹配括号^(?<title>.+) \((?<area>[^()]+)\) \$(?<price>[\d]+)$
^^ ^^^^^^
Here Here
字符,这些字符位于()
捕获组捕获的文本之前和之后。
上述2个解决方案假设area
永远不会包含括号area
个字符。如果你想允许的话,模式会稍微复杂一些。