Я абсолютно неспособен к регулярным выражениям, и таким образом, я нуждаюсь в некоторой помощи с проблемой, что я думаю, был бы лучше всего решен при помощи регулярных выражений.
У меня есть список строк в 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 специален при моем обстоятельстве.
Это действительно зависит от вашего определения специальных символов. Я считаю, что белый, а не черный список - лучший подход в большинстве ситуаций:
tmp = Regex.Replace(n, "[^0-9a-zA-Z]+", "");
Вы должны быть осторожны с вашим текущим подходом, потому что следующие два элемента будут преобразованы в одну и ту же строку и поэтому будут неразличимы:
"TRA-12:123"
"TRA-121:23"
[^ a-zA-Z0-9]
- это класс символов, соответствующий любым не буквенно-цифровым символам.
Или [^ \ w \ d]
делает то же самое.
Использование:
string regExp = "[^\w\d]";
string tmp = Regex.Replace(n, regExp, "");
Это должно сработать:
[^a-zA-Z0-9]
В принципе, он соответствует всем неалфавитно-цифровым символам.
Вы можете использовать:
string regExp = "\\W";
Это эквивалент Даниэля " [^ a-zA-Z0-9]
"
\ W соответствует любому символу, не являющемуся словом. Эквивалентно категориям Unicode [^ \ p {Ll} \ p {Lu} \ p {Lt} \ p {Lo} \ p {Nd} \ p {Pc}]
.
В зависимости от вашего определения «специального символа» я думаю, что "[^ a-zA-Z0-9]", вероятно, поможет. Это обнаружит все, что не является маленькой буквой, заглавной буквой или цифрой.
tmp = Regex.Replace(n, @"\W+", "");
\ w
соответствует буквам, цифрам и знакам подчеркивания, \ W
- это инвертированная версия.