避免重复文字
答
这取决于你的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*(.*)$
你不能这样试试自己吗? – Gabe
试试吧..但正则表达式应该匹配'地址唐宁街城市伦敦市'正确,因为你使捕获“非贪婪”。 – Thilo
OTOH,这不会工作我认为:'地址25市政厅城市纽约' – Thilo