Подтвердить что ты не робот

Как удалить из букв не буквенно-цифровые символы (включая пробелы)?

Как удалить не буквенно-цифровые символы из строки и свободные пробелы в С# с помощью Replace?

Я хочу сохранить a-z, A-Z, 0-9 и ничего больше (даже не "пробелы" ).

"Hello there(hello#)".Replace(regex-i-want, "");

должен давать

"Hellotherehello"

Я пробовал "Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", "");, но пробелы остаются.

4b9b3361

Ответ 1

В вашем регулярном выражении вы исключили пробелы из сопоставления (и вы не использовали Regex.Replace(), который я полностью просмотрел...):

result = Regex.Replace("Hello there(hello#)", @"[^A-Za-z0-9]+", "");

должен работать. + делает регулярное выражение несколько более эффективным, одновременно сопоставляя несколько последовательных символов без алфавитно-цифрового символа, а не один за другим.

Если вы хотите сохранить буквы и цифры, отличные от ASCII, используйте следующее регулярное выражение:

@"[^\p{L}\p{N}]+"

который оставляет

BonjourmesélèvesGutenMorgenliebeSchüler

вместо

BonjourmeslvesGutenMorgenliebeSchler

Ответ 2

Вы можете использовать Linq для фильтрации требуемых символов:

  String source = "Hello there(hello#)";

  // "Hellotherehello"
  String result = new String(source
    .Where(ch => Char.IsLetterOrDigit(ch))
    .ToArray());

или

  String result = String.Concat(source
    .Where(ch => Char.IsLetterOrDigit(ch)));  

И поэтому вам не нужно регулярных выражений.

Ответ 3

Или вы тоже можете это сделать:

    public static string RemoveNonAlphanumeric(string text)
    {
        StringBuilder sb = new StringBuilder(text.Length);

        for (int i = 0; i < text.Length; i++)
        {
            char c = text[i];
            if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
                sb.Append(text[i]);
        }

        return sb.ToString();
    }

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

string text = SomeClass.RemoveNonAlphanumeric("text LaLa (lol) á ñ $ 123 ٠١٢٣٤");

//text: textLaLalol123

Ответ 4

Ошибка, сделанная выше, неправильно использовала Replace (она не принимает регулярное выражение, спасибо CodeInChaos).

Следующий код должен делать то, что было указано:

Regex reg = new Regex(@"[^\p{L}\p{N}]+");//Thanks to Tim Pietzcker for regex
string regexed = reg.Replace("Hello there(hello#)", "");

Это дает:

regexed = "Hellotherehello"

Ответ 5

И как операция замены как метод расширения:

public static class StringExtensions
{
    public static string ReplaceNonAlphanumeric(this string text, char replaceChar)
    {
        StringBuilder result = new StringBuilder(text.Length);

        foreach(char c in text)
        {
            if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
                result.Append(c);
            else
                result.Append(replaceChar);
        }

        return result.ToString();
    } 
}

И тест:

[TestFixture]
public sealed class StringExtensionsTests
{
    [Test]
    public void Test()
    {
        Assert.AreEqual("text_LaLa__lol________123______", "text LaLa (lol) á ñ $ 123 ٠١٢٣٤".ReplaceNonAlphanumeric('_'));
    }
}

Ответ 6

var text = "Hello there(hello#)";

var rgx = new Regex("[^a-zA-Z0-9]");

text = rgx.Replace(text, string.Empty);

Ответ 7

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

([^A-Za-z0-9\s])

Ответ 8

В .Net 4.0 вы можете использовать метод IsNullOrWhitespace класса String для удаления так называемых пробелов. Пожалуйста, посмотрите здесь http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx Однако, как указывает @CodeInChaos, существует множество символов, которые можно рассматривать как буквы и цифры. Вы можете использовать регулярное выражение, только если хотите найти A-Za-z0-9.