RegEx与以下\。\ d的组不匹配

时间:2012-01-22 17:41:08

标签: c# .net regex street-address

我尝试在不同的文本中查找地址。它工作得很好,除了它还匹配一个单词后跟一个日期(foobar 22.01.2012 =>地址:foobar 22) 所以我想改进正则表达式,以街道号码不得跟着“(。|:)\ d”

这就是我所拥有的:

(?<str>\b([a-zA-Z]+-*[a-zA-Z]+(-|\s)*([a-zA-Z]|-)+)\b\.?\s{1})(?<no>\d+(\s?[a-zA-Z])?\b)

代表性文字:

  

咨询时间
  星期一,06.02。直到星期五,10.02.2012和
  星期一,13.02。直到星期二,2012年2月14日,
  每个14.00-15.30点,二楼,
  Am Fasanengarten 12 foobar
  Schlossstr。 34

应该找到什么?
Am Fasanengarten 12
Schlossstr。 34

找到了什么?
06年 10 13
14 每个14
Am Fasanengarten 12
foob​​ar //为什么这是一场比赛?没有号码?
Schlossstr。 34个

我尝试了不同的正面/负面观察背景/ - 但没有运气。

1 个答案:

答案 0 :(得分:1)

在这里试试

(?<str>\b(?:[a-zA-Z]+-*[a-zA-Z]+(?:[ \t-])*(?:[a-zA-Z]|-)+)\b\.?\s)(?<no>\d+(?:\s?[a-zA-Z])?\b)(?![.:]\d)

here on Regexr

最后的负向前瞻(?![.:]\d)确保没有“。”并且没有“:”后跟\d

  

foobar //为什么这是一场比赛?没有号码?
   Schlossstr。 34

这是匹配项,因为您在街道名称

之间允许\s
(?<str>\b([a-zA-Z]+-*[a-zA-Z]+(-|\s)*([a-zA-Z]|-)+)\b\.?\s{1})(?<no>\d+(\s?[a-zA-Z])?\b)
                                 ^^ here

我在我的解决方案中用[ \t-]替换了它,这只允许使用空格,制表符和连字符。

\s是“Whitespace”,它还包含行制动字符,因此它与foobar相匹配,如果您看过该组,您会看到它与地址“foobar”相匹配Schlossstr.34“