Как я могу извлечь все не алфавитно-цифровые символы из входной строки, используя регулярные выражения? - PullRequest
1 голос
/ 22 марта 2019

Цель: Получить все не алфавитно-цифровые символы, даже если они не являются смежными.
Настройка: У меня есть текстовое поле на странице ASP.Net, которое вызывает код C # позади метода TextChanged. Этот обработчик событий запускает ввод текстового поля для шаблона Regex.
Проблема: Я не могу создать правильный шаблон Regex, который извлекает все не алфавитно-цифровые символы.

Это строка ввода: string titleString = @"%2@#$%^&";

Вот шаблоны C # Regex, которые я пробовал:

string titlePattern = @"(\b[^A-Za-z0-9]+)"; результаты с @#$%^& (Примечание: если я использую эту входную строку %2@35%^&, то приведенный выше шаблон регулярного выражения идентифицирует знак @, а затем %^&), но никогда не ведущий % знак).
string titlePattern = @"(\A[^A-Za-z0-9]+)"; Результаты с %
string titlePattern = @"(\b\W[^A-Za-z0-9]+)"; Результаты с @#$%^&

Side Note: Я также запускаю это в консольном приложении MS Visual Studio с циклом foreach, чтобы собрать все недопустимые символы в коллекцию, и я также протестировал ввод и шаблон, используя веб-сайт: http://regexstorm.net/tester

1 Ответ

3 голосов
/ 22 марта 2019

Используйте метод замены со строкой выбора.

РЕДАКТИРОВАТЬ: После более внимательного прочтения я вижу, что вы хотели противоположную строку. Вот и то и другое.

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string Source = @"H)*e/.?l\l{}*o ][W!~`@#""or^-_=+ld!";
            string Trash = @"[^a-zA-Z0-9]";
            string InvertedTrash = @"[a-zA-Z0-9]";

            Output(Source, Trash);
            Console.WriteLine($"{System.Environment.NewLine}Opposite Day!{System.Environment.NewLine}");
            Output(Source, InvertedTrash);
            Console.ReadKey();
        }
        static string TakeOutTheTrash(string Source, string Trash)
        {
            return (new Regex(Trash)).Replace(Source, string.Empty);
        }
        static void Output(string Source, string Trash)
        {
            string Sanitized = TakeOutTheTrash(Source, Trash);
            Console.WriteLine($"Started with: {Source}");
            Console.WriteLine($"Ended with: {Sanitized}");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...