我需要一个regEx来检索字符串和streetnumber的街道。让我们考虑一下,街道名称从头开始,直到有一个空格后跟一个数字
示例:
原文字符串:' Jan van Rijswijcklaan 123' 结果应该是:' Jan van Rijswijcklaan'作为街道名称和' 123'作为街道号码。
感谢任何帮助。
更新
我能够获得街道名称和号码,但有时候我有街道号码,如' 123b a1'然后代码在定义streetnumber时失败了。因此,街道号码只是' a1'而不是' 123b a1'。
所以目前我正在处理2个场景:
这是我尝试过的代码:
string street = Regex.Match(streetWithNum, @"^[^0-9]*").Value + ";";
string number = Regex.Match(streetWithNum, @"\w\d*\w?\d*$").Value + ";";
答案 0 :(得分:2)
使用正向前瞻模式搜索分割条件:
var s = "Jan van Rijswijcklaan 124";
var result = Regex.Split(s, @"\s(?=\d)");
Console.WriteLine("street name: {0}", result[0]);
Console.WriteLine("street number: {0}", result[1]);
打印:
street name: Jan van Rijswijcklaan
street number: 124
注意:如果需要
,请使用Int32.TryParse将街道号码从字符串转换为int答案 1 :(得分:1)
我不是正则表达的粉丝,你注意到了吗?
IEnumerable<string> nameParts = "Jan van Rijswijcklaan 124".Split()
.TakeWhile(word => !word.All(Char.IsDigit));
string name = string.Join(" ", nameParts);
如果您想同时使用街道名称和号码:
string[] words = "Jan van Rijswijcklaan 124".Split();
var streetNamePart = words.TakeWhile(w => !w.All(Char.IsDigit));
var streetNumberPart = words.SkipWhile(w => !w.All(Char.IsDigit));
Console.WriteLine("street-name: {0}", string.Join(" ", streetNamePart));
Console.WriteLine("street-number: {0}", string.Join(" ", streetNumberPart));
答案 2 :(得分:0)
这里也是非正则表达式解决方案;
string str = "Jan van Rijswijcklaan 124";
var array = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string streetname = "";
string streetnumber = "";
foreach (var item in array)
{
if (Char.IsNumber(item[0]))
streetnumber += item;
else
streetname += item + " ";
}
Console.WriteLine(streetname.TrimEnd());
Console.WriteLine(streetnumber);
输出将是;
Jan van Rijswijcklaan
124
这里有 DEMO 。
答案 3 :(得分:0)
只需用lookahead解决@Ilya_Ivanov的答案:
var result = Regex.Split(s, @"\s(?=\d)");
答案 4 :(得分:0)
这应该做:
Regex r = new Regex(@"(.+?) (\d+)$");
Match m = r.Match("Jan van Rijswijcklaan 124");
String street = m.Groups[1].Value;
String number = m.Groups[2].Value;
我从记忆中输入了这个,不要因为错别字而责怪我。)
编辑:正则表达式字符串末尾的'$'确保数字匹配仅在输入字符串的末尾发生。
编辑2:刚删除拼写错误并测试了代码,现在可以正常工作。
编辑3:表达式可以读作:收集尽可能多的字符,你可以进入第1组而不是贪婪(。+?)但是在字符串末尾留下一个数字序列,在空格之后,第2组(\ d +)$