我正在使用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] (.*)";
然而,后模式包括匹配字符串。另外,我不确定如何确定应该使用哪个之前/之后的比赛(除了说“之前”或“之后的最短”之后必须有效)
答案 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;
由于正则表达式会尽可能匹配,所以应该找到你要找的东西