避免文字重复

时间:2011-11-24 02:39:50

标签: regex

假设我有这个字符串:

Address XXXXX city XXXXX 

这个regEX:

Address (.*?) city (.*?)

如果地址是“伦敦金融城”会怎样?

1 个答案:

答案 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*(.*)$