使用C#/ regex分割街道名称

时间:2018-12-06 08:25:39

标签: c# regex

我正在(正好是第一次)使用正则表达式。

我的目标是拆分多个用“ /”分隔的街道名称。有一些特别的事情要注意。在“ /”之前和之后可能会有一个空格,在斜杠之后必须有一个字母而不是数字(因为有时门牌号也由斜杠分隔。

我差点存档目标。当前,当一个字符串中只有两个街道名称时,它会按我的意愿进行拆分,但是对于三个街道名称,我有问题(它只能拆分一次)。

我目前的两次正则表达式尝试如下:

  • /。([[A-Za-z] +)。*? (效果很好,但仅在两条街道上行驶,而忽略了其他地方)
  • /。([[A-Za-z] +)。*(可用于多条街道,但在街道名称中的空格后停止

为了清楚起见,我附上了一些屏幕截图:

Image1

在此屏幕截图中,我按照自己的意愿进行了拆分(但仅拆分了一次,而忽略了第三条街道)。

Iamge2

在第二张屏幕截图中,我添加了“?”在正则表达式的末尾。现在,它正在考虑第三条街,但在空白处切掉了第二条街。

希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

int z = 0;
string[] arr = new[]
{
    "Street name 1 / Street name 2 / Street name 3",
    "Street name 1 /Street name 2",
    "Street name 1 / 2"
};
string pattern = @"(?i)\s*/\s*(?=[a-z])";

foreach (var x in arr)
{
    WriteLine($"Record {++z}");
    var streets = Regex.Split(x, pattern);
    foreach (var street in streets)
    {
        WriteLine("\t" + street);
    }
}
/* 
   Output:

   Record 1
      Street name 1
      Street name 2
      Street name 3
   Record 2
      Street name 1
      Street name 2
   Record 3
      Street name 1 / 2
*/