Использование выражения Regex для удаления определенных символов из строки в C # [дубликат]

По какой-то причине, в веб-приложении, которое я обслуживаю, ни решение Alireza Fattahi , ни решение JJ Roman работало правильно. В обоих случаях компиляция идет хорошо (она видит банку), но упаковка не может содержать банку внутри войны.

Единственный способ, которым я смог заставить его работать, - положить банку на /src/main/webapp/WEB-INF/lib/, а затем объединить его с решением Фаттахса или Романа.

1
задан circler 22 June 2014 в 13:12
поделиться

7 ответов

вы можете использовать этот шаблон

^[^[:alnum:]]+|[^[:alnum:]]+$  

с опцией g Демо

-1
ответ дан alpha bravo 3 September 2018 в 16:07
поделиться

Предполагая, что вы хотите обрезать не буквенно-цифровые символы из начала и конца строки:

s = new string(s.SkipWhile(c => !char.IsLetterOrDigit(c))
                .TakeWhile(char.IsLetterOrDigit)
                .ToArray());
0
ответ дан Douglas 3 September 2018 в 16:07
поделиться

Если вам нужно удалить любой символ, который не является буквенно-цифровым, вы можете использовать IsLetterOrDigit в паре с Where для прохождения каждого символа. И поскольку мы работаем на уровне char, нам понадобится немного Concat в конце, чтобы вернуть все обратно в string.

string result = string.Concat(input.Where(char.IsLetterOrDigit));

, который вы можете легко конвертировать в метод расширения

public static class Extensions
{
    public static string ToAlphaNum(this string input)
    {
        return string.Concat(input.Where(char.IsLetterOrDigit));
    }
}

, который вы можете использовать следующим образом:

string testString = "#!@!\"(test123)\"";
string result = testString.ToAlphaNum(); //test123

Примечание: это приведет к удалению каждого не алфавитно-цифрового символа из вашей строки, если вам действительно нужно удалите только тех, кто находится в начале / конце, добавьте более подробную информацию о том, что определяет начало или конец и добавьте больше примеров.

0
ответ дан Pierre-Luc Pineault 3 September 2018 в 16:07
поделиться

И вы также можете заменить все не-буквы / цифры в начале и / или конце строки:

^[^\p{L}\p{N}]*|[^\p{L}\p{N}]*$

, используемый как

 resultString = Regex.Replace(subjectString, @"^[^\p{L}\p{N}]*|[^\p{L}\p{N}]*$", "", RegexOptions.Multiline);

Если вы действительно хотят только удалить символы в начале и конце строки и не делать это по строкам, а затем удалить опцию ^ $ в параметре linebreak (RegexOption.Multiline)

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

^\W+|\W+$

Ядро регулярного выражения:

[^\p{L}\p{N}]

является отрицательным символьным классом, который включает все символы в классе Unicode букв \ p {L} или Numbers \ p {N}

. Другими словами:

Обрезать алфавитно-цифровые символы без юникода

^[^\p{L}\p{N}]*|[^\p{L}\p{N}]*$

Options: Case sensitive; Exact spacing; Dot doesn't match line breaks; ^$ match at line breaks; Parentheses capture

Match this alternative «^[^\p{L}\p{N}]*»
   Assert position at the beginning of a line «^»
   Match any single character NOT present in the list below «[^\p{L}\p{N}]*»
      Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
      A character from the Unicode category “letter” «\p{L}»
      A character from the Unicode category “number” «\p{N}»
Or match this alternative «[^\p{L}\p{N}]*$»
   Match any single character NOT present in the list below «[^\p{L}\p{N}]*»
      Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
      A character from the Unicode category “letter” «\p{L}»
      A character from the Unicode category “number” «\p{N}»
   Assert position at the end of a line «$»

Создано с помощью RegexBuddy

0
ответ дан Ron Rosenfeld 3 September 2018 в 16:07
поделиться

Без использования регулярных выражений: на Java вы могли бы сделать: (в синтаксисе c # почти одинаково с одинаковой функциональностью)

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
}
0
ответ дан Snowman 3 September 2018 в 16:07
поделиться

Вы можете использовать функцию String String.Trim Method (Char[]) в библиотеке .NET, чтобы обрезать ненужные символы из данной строки.

Из MSDN: String.Trim Method (Char[])

Удаляет все ведущие и завершающие вхождения набора символов, заданных в массиве из текущего объекта String.

Перед обрезкой нежелательных символов вам необходимо сначала определить, символ Letter Или Digit, если он не является алфавитно-цифровым, вы можете использовать функцию String.Trim Method (Char[]) для его удаления.

вам нужно использовать функцию Char.IsLetterOrDigit (), чтобы идентифицировать

Из MSDN: Char.IsLetterOrDigit()

Указывает, является ли символ Юникода классифицированным как буква или десятичная цифра .

Попробуйте следующее:

string str = "()&*1@^#47*^#21%Littering aaaannnndóú(*&^1#*32%#**)7(#9&^";
foreach (char ch in str)
{
    if (!char.IsLetterOrDigit(ch))
        str = str.Trim(ch);
}

Выход:

1@^#47*^#21%Littering aaaannnndóú(*&^1#*32%#**)7(#9
0
ответ дан Sudhakar Tillapudi 3 September 2018 в 16:07
поделиться

@"[^\p{L}\s-]+(test\d*)|(test\d*)[^\p{L}\s-]+","$1 "

2
ответ дан walid toumi 3 September 2018 в 16:07
поделиться
Другие вопросы по тегам:

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