2014-10-02 2 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'? –

+0

@AvinashRaj Я хочу разделить информацию во многих частях. 1. Для имени улицы, 2. для номера дома, 3. для номера дома с дополнительной буквой (если указано). Но если вход в форме «Streetname 12-14», я читал только имя улицы 12 и - – MikroDel

+0

@AvinashRaj после буквы A, могут быть пробелы, но это не будет проблемой, потому что я проверю строки после разделения с помощью строки '! .IsNullOrWhiteSpace' – MikroDel

ответ

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. Как я могу игнорировать точки? Второй - это пробел перед номером. Пример: Some street 34. – MikroDel

+0

Я добавил обновление! – Fratyx

+0

Спасибо! Я попробую на следующей неделе и приму это, если это решение! :) – MikroDel

Смежные вопросы