正则表达式分割地址和返回特定部分

时间:2012-06-27 00:30:13

标签: c# regex

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

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

  

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

如果我有地址 - 例如

unit 32 a Smith Crescent, Johnsonville

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

  

单位32 a

OR之后的所有内容,不包括单位号码的最后一个实例

  史密斯新月,约翰逊维尔

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

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] (.*)";

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;

由于正则表达式会尽可能匹配,所以应该找到你要找的东西