0

我正在使用 C# 的 RegEx 将地址分解为特定部分,然后返回这些部分,并根据模式进行拆分。

单位编号可以定义为数字和单个字母的任意组合,或数字、空格和单个字母的任意组合

即2a、328b、32c都是单元号。

如果我有地址 - 例如。

unit 32 a Smith Crescent, Johnsonville

我想要允许我返回所有内容的正则表达式,包括单位号的最后一个实例

单元32a

或之后的所有内容,不包括单元号的最后一个实例

史密斯新月,约翰逊维尔

另一个(不切实际的)例子:

unit 32a Smith 3 d Crescent, Johnsonville

我希望能够得到:

unit 32a Smith 3 d

或者

Crescent, Johnsonville

即我想在最后一个实例上匹配:

 "[0-9][a-z] " or "[0-9] [a-z] "

我试过了:

var beforePattern = "^.*[0-9][a-z] ";
            var beforepatternSpace = "^.*[0-9] [a-z] ";
            var afterPattern = "[0-9][a-z] (.*)";
            var afterPatternSpace = "[0-9] [a-z] (.*)";

然而,后面的模式包括匹配字符串。另外,我不确定如何确定应该使用哪个之前/之后的匹配(除了说最长的“之前”或最短的“之后”必须是有效的)

4

2 回答 2

1

我会在 C# 中使用它

(.*\d\s*[a-z])\s*(.*)

第 1 组和第 2 组有你现在想要的

对两个样品进行了测试。如果某些情况不是预期的,请提供更多示例。

一些 C# 代码

var match = Regex.Match("unit 32a Smith 3 d Crescent, Johnsonville", @"(.*\d\s*[a-z])\s*(.*)");

var part1 = match.Groups[1].Value;
var part2 = match.Groups[2].Value;
于 2012-06-27T00:36:01.037 回答
1
var regex = new Regex( "(?<before>.*\d+\s?\w+\s)(?<after>.*)" );

var match = regex.Match( input );

var beforeString = match["before"].Value;
var afterString = match["after"].Value;

由于正则表达式将尽可能匹配,因此应该可以找到您要查找的内容

于 2012-06-27T00:42:57.590 回答