Есть ли простой способ сопоставить всю пунктуацию, кроме периода и подчеркивания, в регулярном выражении С#? В надежде сделать это без перечисления всех знаков препинания.
Регулярное выражение: соответствие любому знаку препинания, кроме. а также _
Ответ 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]
Сюда входят все символы, кроме перечисленных. Возможно, вам придется исключить больше символов (например, контрольные символы), в зависимости от ваших окончательных требований.