假设我要匹配此字符串:
Name XXXXAddress XXXXX XXXX City XXXXX
其中X是非指定数量的字符,符号,数字或换行符和空格。我经常这样做:
Name (.*?)Address (.*?) (.*?) City (.*?)
但正如你所看到的那样。在第三场比赛和城市文字之间,有一个SPACE字符。因此,如果第二个匹配包含一个具有1个或多个空格的地址,那么引擎将执行此操作:
前:如果地址是:pushkina road 10,我将有第二场比赛等于“pushkina”
这没错,但对我来说还不够。我想指示引擎考虑更接近City的字符序列优先于第一个...所以如果第一个块甚至第二个块中有空格而不考虑那些并且只是以这种方式跳过。
这可能吗?我使用.NET风格。
答案 0 :(得分:0)
我感谢tested the regex感谢Ruby Rubular,我想它也适用于.NET。
^Name ((?:.(?!Address))*) Address ((?:.(?!\S+ City))*) (\S+) City (.*)$
我使用了以下测试字符串:
Name XX X X Address XX X X X YYYYYY City Z Z Z Z
假设:Y的序列不包含任何空格。
子表达式((?:.(?!Address))*)
允许我们匹配任何字符序列,前提是Address
后面没有任何字符。子表达式((?:.(?!\S+ City))*)
执行相同的操作,其中字符未跟随\S+ City
,即一系列非空格字符,后跟City。子正则表达式使用负前瞻运算符(?!...)
。