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

Регулярное выражение: соответствие любому знаку препинания, кроме. а также _

Есть ли простой способ сопоставить всю пунктуацию, кроме периода и подчеркивания, в регулярном выражении С#? В надежде сделать это без перечисления всех знаков препинания.

4b9b3361

Ответ 1

Использование вычитания регулярных выражений

[\p{P}-[._]]

Здесь ссылка на документацию .NET Regex (я не уверен, поддерживают ли другие варианты)... http://msdn.microsoft.com/en-us/library/ms994330.aspx

Здесь пример С#

string pattern = @"[\p{P}\p{S}-[._]]"; // added \p{S} to get ^,~ and ` (among others)
string test = @"_""'a:;%^&*~`[email protected]#.,?";
MatchCollection mx = Regex.Matches(test, pattern);
foreach (Match m in mx)
{
    Console.WriteLine("{0}: {1} {2}", m.Value, m.Index, m.Length);
}

Объяснение Образец - вычитание класса символов. Он начинается со стандартного класса символов, такого как [\ p {P}], а затем добавляет класс символов вычитания, например - [._], который говорит, чтобы удалить. а также _. Вычитание помещается внутри [] после стандартных классов.

Ответ 2

Ответы до сих пор не учитывают ВСЕ пунктуацию. Это должно работать:

(?![\._])\p{P}

(Объяснение: Отрицательный просмотр, чтобы гарантировать, что ни ., ни _ не совпадают, а затем соответствуют любому символу пунктуации unicode.)

Ответ 3

Вот что-то немного проще. Не слова или пробелы (где слова включают A-Za-z0-9 И подчеркивание).

[^\w\s.]

Ответ 4

Возможно, вы можете использовать класс символов с отрицанием:

[^0-9A-Za-z._\s]

Сюда входят все символы, кроме перечисленных. Возможно, вам придется исключить больше символов (например, контрольные символы), в зависимости от ваших окончательных требований.