假设我有这个字符串:
Address XXXXX city XXXXX
这个regEX:
Address (.*?) city (.*?)
如果地址是“伦敦金融城”会怎样?
答案 0 :(得分:1)
这取决于你的reex引擎是否处于贪婪模式。
如果它处于贪婪模式,它会按预期工作,因为它会寻找最长的匹配。
默认情况下,您的特定正则表达式引擎是以贪婪模式运行,还是是否贪婪模式 - 我们无法根据问题中提供的信息告诉您。
如果你正在使用.NET,this page会有关于贪婪与懒惰匹配的描述。
基本上,给定字符串XYZZY
,正则表达式X.*Y
将匹配XYZZY
(贪婪),而X.*?Y
将匹配XY
(懒惰)。
您需要的是一种确保您可以区分分隔符和字符串元素的方法,否则您无论遇到什么都会遇到麻烦,例如:
Address The city baths city Manchester city, England
也许您可以查看类似的内容:
Address "put address here" city "put city here"
并尝试确保您从未获得带引号的城市名称。但是要小心。我曾经在一个项目上工作,我们设法在城市名称上得到了一些不错的压缩(它被嵌入以便计算每个字节)只需要存储字母字符。
此后不久,我们在全国范围内推出,A1 mining settlement
的居民对我们的短视感到非常恼火:-)整个奥兹的一个城镇,名字中有一个数字,他们有以为?
或者,将地址和城市放在不同的行上:
Address: The city baths
City: Manchester city, England
然后你可以找到像:
这样的东西^Address:\s*(.*)$
^City:\s*(.*)$