Regex для удаления всех специальных символов из строки?

Я абсолютно неспособен к регулярным выражениям, и таким образом, я нуждаюсь в некоторой помощи с проблемой, что я думаю, был бы лучше всего решен при помощи регулярных выражений.

У меня есть список строк в C#:

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.

Существует ли регулярное выражение, которое может выполнить это для меня?

Кроме того, список содержит больше чем 4 000 объектов, таким образом, мне нужны поиск и замена, чтобы быть эффективным и быстрым, если это возможно.

Править: Я должен был указать, что любой символ около a-z, A-Z и 0-9 специален при моем обстоятельстве.

62
задан ROMANIA_engineer 11 December 2017 в 20:53
поделиться

6 ответов

Это действительно зависит от вашего определения специальных символов. Я считаю, что белый, а не черный список - лучший подход в большинстве ситуаций:

tmp = Regex.Replace(n, "[^0-9a-zA-Z]+", "");

Вы должны быть осторожны с вашим текущим подходом, потому что следующие два элемента будут преобразованы в одну и ту же строку и поэтому будут неразличимы:

"TRA-12:123"
"TRA-121:23"
105
ответ дан 24 November 2019 в 16:38
поделиться

[^ a-zA-Z0-9] - это класс символов, соответствующий любым не буквенно-цифровым символам.

Или [^ \ w \ d] делает то же самое.

Использование:

string regExp = "[^\w\d]";
string tmp = Regex.Replace(n, regExp, "");
16
ответ дан 24 November 2019 в 16:38
поделиться

Это должно сработать:

[^a-zA-Z0-9]

В принципе, он соответствует всем неалфавитно-цифровым символам.

16
ответ дан 24 November 2019 в 16:38
поделиться

Вы можете использовать:

string regExp = "\\W";

Это эквивалент Даниэля " [^ a-zA-Z0-9] "

\ W соответствует любому символу, не являющемуся словом. Эквивалентно категориям Unicode [^ \ p {Ll} \ p {Lu} \ p {Lt} \ p {Lo} \ p {Nd} \ p {Pc}] .

8
ответ дан 24 November 2019 в 16:38
поделиться

В зависимости от вашего определения «специального символа» я думаю, что "[^ a-zA-Z0-9]", вероятно, поможет. Это обнаружит все, что не является маленькой буквой, заглавной буквой или цифрой.

3
ответ дан 24 November 2019 в 16:38
поделиться
tmp = Regex.Replace(n, @"\W+", "");

\ w соответствует буквам, цифрам и знакам подчеркивания, \ W - это инвертированная версия.

2
ответ дан 24 November 2019 в 16:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: