Regex удалить все специальные символы из строки?
Я полностью неспособен к регулярным выражениям, поэтому мне нужна помощь с проблемой, которая, по моему мнению, лучше всего будет решена с помощью регулярных выражений.
У меня есть список строк в С#:
List<string> lstNames = new List<string>();
lstNames.add("TRA-94:23");
lstNames.add("TRA-42:101");
lstNames.add("TRA-109:AD");
foreach (string n in lstNames) {
// logic goes here that somehow uses regex to remove all special characters
string regExp = "NO_IDEA";
string tmp = Regex.Replace(n, regExp, "");
}
Мне нужно иметь возможность перебирать список и возвращать каждый элемент без каких-либо специальных символов. Например, первым пунктом будет "TRA9423", второй будет "TRA42101", а третий элемент будет TRA109AD.
Есть ли регулярное выражение, которое может выполнить это для меня?
Кроме того, список содержит более 4000 элементов, поэтому мне нужно, чтобы поиск и замена были эффективными и быстрыми, если это возможно.
EDIT:
Я должен был указать, что любой символ рядом с a-z, A-Z и 0-9 является особенным в моих обстоятельствах.
Ответы
Ответ 1
Это зависит от вашего определения специальных символов. Я считаю, что белый список, а не черный список - лучший подход в большинстве ситуаций:
tmp = Regex.Replace(n, "[^0-9a-zA-Z]+", "");
Вы должны быть осторожны с вашим текущим подходом, потому что следующие два элемента будут преобразованы в одну и ту же строку и поэтому будут неразличимы:
"TRA-12:123"
"TRA-121:23"
Ответ 2
Это должно сделать это:
[^a-zA-Z0-9]
В основном это соответствует всем не-буквенно-цифровым символам.
Ответ 3
[^a-zA-Z0-9]
- это класс символов, соответствующий любым несимвольным символам.
Альтернативно, [^\w\d]
делает то же самое.
Использование:
string regExp = "[^\w\d]";
string tmp = Regex.Replace(n, regExp, "");
Ответ 4
Вы можете использовать:
string regExp = "\\W";
Это эквивалентно Daniel "[^a-zA-Z0-9]
"
\ W соответствует любому символу без слова. Эквивалентен категориям Unicode [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]
.
Ответ 5
В зависимости от вашего определения "специальный символ", я думаю, что "[^ a-zA-Z0-9]", вероятно, сделает трюк. Это найдет все, что не является маленькой буквой, заглавной буквой или цифрой.
Ответ 6
tmp = Regex.Replace(n, @"\W+", "");
\w
соответствует буквам, цифрам и символам подчеркивания, \w
является отрицательной версией.
Ответ 7
В моих целях мне нужны все английские символы ASCII, так что это сработало.
html = Regex.Replace(html, "[^\x00-\x80]+", "")
Ответ 8
Если вы не хотите использовать Regex, то другой вариант - использовать
char.IsLetterOrDigit
Вы можете использовать это для прокрутки каждой строки char строки и только возвращать, если true.