2014-10-02 62 views
0

需要什么:地址信息

对于输入:

Somestreet 
Somestreet 12  
Somestreet 12 A  
Somestreet 12-14 

输出:

Somestreet 

Somestreet | 12 

Somestreet | 12 | A 

Somestreet | 12 | - | 14 

其中|是分隔符

我已完成:

var pattern = @"(\d+)"; 
var regex = new Regex(pattern, RegexOptions.IgnoreCase); 

var matchCollection = regex.Split(input); 

var street = matchCollection[0]; 

if (matchCollection.Length > 1) 
{ 
    houseNumber = matchCollection[1]; 
} 

if (matchCollection.Length > 2) 
{ 
    houseNumberLetter = matchCollection[2]; 
} 

对于前三种情况,但对于四号不适用。

你能帮助我吗?

+0

你想在字符串之间换行吗?字母“A”后面是否有空格? – 2014-10-02 11:55:31

+0

@AvinashRaj我想分割很多部分的信息。 1.对于街道名称,2.对于门牌号码,3.对于带有额外字母的门牌号(如果给出)。但是如果以“Streetname 12-14”的形式输入,我在字母A之后只读了Streetname 12和 - – MikroDel 2014-10-02 11:59:12

+0

@AvinashRaj,但可能会有空格,但这不会成为问题,因为我使用'!string .IsNullOrWhiteSpace' – MikroDel 2014-10-02 12:03:19

回答

1

这是行不通的?

string result = string.Join(" | ", Regex.Matches(input, @"(\w+|\-)").Cast<Match>().Select(d => d.Value)); 

UPDATE

更好?

string result = string.Join(" | ", Regex.Matches(input, @"([a-zA-Z\. ]+|[0-9]+|\-)").Cast<Match>().Select(d => d.Value.Trim())); 

我不得不分开字母和数字匹配以包含可能的空格。

+0

谢谢(\ w + | \ - )它的作品不错。唯一的两个问题是“。”如果输入是Some.street。我怎样才能忽略点?第二个是数字前的空格。例如:一些街道34. – MikroDel 2014-10-02 13:37:06

+0

我添加了更新! – Fratyx 2014-10-02 13:48:52

+0

谢谢!如果是解决方案,我会在下周尝试并接受它! :) – MikroDel 2014-10-02 20:18:00