2013-06-18 1 views
2

EDIT: Я изменил название, чтобы точно отразить то, что я пытаюсь сделать.Как бы обрезать все не буквенно-цифровые и числовые символы от начала и до конца строки?

Есть ли способ получить все буквенно-цифровые символы (или предпочтительно только алфавит) для текущей культуры в .NET? Мой сценарий состоит в том, что у меня есть несколько строк, в которых мне нужно удалить все цифры и символы без алфавита, и я не совсем уверен, как бы это реализовать, соблюдая алфавит на языках, отличных от английского (не создавая массивы всех алфавит символов для всех поддерживаемых языков .NET, или, по крайней мере, языки наших текущих клиентов лол)

UPDATE:

в частности, то, что я пытаюсь сделать, это обрезать все не-алфавитные символы с самого начала строки до первого символа алфавита, а затем от последнего символа алфавита до конца строки. Таким образом, для случайного примера в EN-US, я хочу обратиться:

()&*[email protected]^#47*^#21%Littering aaaannnnd(*&^1#*32%#**)7(#9&^ 

в следующее:

Littering aaaannnnd 

Это было бы достаточно просто сделать для английского языка, так как это мой первый язык, но на самом деле в любой культуре мне нужно убрать цифры и другие небуквенные символы из строки.

+2

Duplicate - http://stackoverflow.com/questions/5676692/howto-enumerate-the-localized-alphabet-in-c – EkoostikMartin

+0

Можете ли вы показать несколько примеров различных рисунков, которые вам нужно удалить не-альфа-символы из, возможно, вы можете попробовать другие альтернативы .. – MethodMan

+0

Я обновлю вопрос на примере –

ответ

1
string something = "()&*[email protected]^#47*^#21%Littering aaaannnndóú(*&^1#*32%#**)7(#9&^"; 
    string somethingNew = Regex.Replace(something, @"[^\p{L}-\s]+", ""); 

Это вы что искали?

Редактировать: добавлена ​​возможность использования символов других языков. Этот выход будет Замусоривание aaaannnndóú

+0

Просто заметил, что ты сказал что-нибудь до и после. В этом примере также будут удалены все незаконные символы. Так что, если засосать aaaannnnd был Li @ 34tterin 98 # 45 aaaann $ 45), и он все равно выйдет. Загрязнение aaaannnd ... Не уверен, что это сработает для вас. –

+1

Он сказал, что хочет решения, которое работает во всех культурах не только для американо-английского. Поэтому представьте, что он хотел, чтобы кириллицы были в порядке в русской культуре, французские символы на французском языке и т. Д. – Shlomo

+0

Спасибо Shlomo, я обновил свой ответ, чтобы принять символы других языков. –

0

Использование регулярных выражений метод, это должно работать:

string input = "()&*[email protected]^#47*^#21%Littering aaaannnnd(*&^1#*32%#**)7(#9&^"; 
string result = Regex.Replace(input, "(?:^[^a-zA-Z]*|[^a-zA-Z]*$)", ""); //TRIM FROM START & END 
+0

См. Комментарий Shlomo выше, США-английский - не единственная культура, в которой мне нужно это, чтобы работать. –

+0

@AlexanderMiles проверяет мой ответ выше. Я обновил его там, где я надеюсь, что он сработает для вас. –

+0

Awesome, thanks –

0

без использования регулярных выражений: В Java, вы могли бы сделать:

while (true) { 
    if (word.length() == 0) { 
     return ""; // bad 
    } 

    if (!Character.isLetter(word.charAt(0))) { 
     word = word.substring(1); 
     continue; // so we are doing front first 
    } 
    if (!Character.isLetter(word.charAt(word.length()-1))) { 
     word = word.substring(0, word.length()-1); 
     continue; // then we are doing end 
    } 
    break; // if front is done, and end is done 
} 

Если вы используете что-то другое , то java, заменяя Character.isLetter очень прямолинейным, просто выполните поиск кодировки символов, и вы найдете целые значения для буквенных символов, и вы можете использовать это для этого.