regex 正则表达式查找多个以空格分隔的重复数字

twh00eeo  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(108)

我尝试了几种方法,但都没有达到预期的效果。目的是检测街道后面的 * 重复 * 房屋 * 号码 *。
例如,这将是一个正确的条目:
Randomstreet 33a

Randomstreet 45
但有时会有(请注意号码重复)
Randomstreet 33a 33a

Randomstreet 45 45
所以规则就是
后面不能出现由空格分隔的两个相同的字符块
我已经尝试了各种简单的模式,但似乎我已经无法理解它们。

oyxsuwqo

oyxsuwqo1#

如果我们可以假设数字(门牌号,公寓号等)必须从数字1..9开始,并且可以以英语小写字母a..z结束,那么您可以尝试匹配 * 正则表达式 * 模式:

(?<number>[1-9][0-9]*[a-z]*)(?:\s+\k<number>)+

模式解释

(?<number>[1-9][0-9]*[a-z]*) - a group "number" which
                               starts from digit in 1..9 range
                               can followed by digits in 0..9 range
                               finally, can followed by letters in a..z range
          (?:\s+\k<number>)+ - the very same match "number" repeated 
                               one or more times separated by white spaces

代码:

using System.Linq;
using System.Text.RegularExpression;

...

string text = "Randomstreet 33a 33a or Randomstreet 45 45 apartment 14 14 14";

var result = Regex
  .Matches(text, @"(?<number>[1-9][0-9]*[a-z]*)(?:\s+\k<number>)+")
  .Select(match => match.Groups["number"].Value)
  .ToArray();

Console.Write(string.Join(Environment.NewLine, result));

输出:

33a
45
14

相关问题