我尝试在不同的文本中查找地址。它工作得很好,除了它还匹配一个单词后跟一个日期(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
foobar //为什么这是一场比赛?没有号码?
Schlossstr。 34个
我尝试了不同的正面/负面观察背景/ - 但没有运气。
答案 0 :(得分:1)
在这里试试
(?<str>\b(?:[a-zA-Z]+-*[a-zA-Z]+(?:[ \t-])*(?:[a-zA-Z]|-)+)\b\.?\s)(?<no>\d+(?:\s?[a-zA-Z])?\b)(?![.:]\d)
最后的负向前瞻(?![.:]\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“