c# телефона Как сопоставить дефисы с регулярным выражением?




регулярные выражения синтаксис (5)

Как переписать [a-zA-Z0-9!$* \t\r\n] в соответствие с дефисами вместе с существующими символами?


Побег дефиса.

[a-zA-Z0-9!$* \t\r\n\-]

ОБНОВЛЕНИЕ :
Не обращайте внимания на этот ответ - вы можете добавить дефис в группу, но вам не нужно его избегать. См . Ответ Конрада Рудольфа, который намного лучше отвечает и объясняет, почему.


Дефис обычно является нормальным символом в регулярных выражениях. Только если он находится в классе символов и между двумя другими символами, это имеет особое значение.

Таким образом:

  • [-] соответствует дефису.
  • [abc-] соответствует a , b , c или дефис.
  • [-abc] соответствует a , b , c или дефис.
  • [ab-d] соответствует a , b , c или d ( только здесь дефис обозначает диапазон символов).

Менее сложно использовать экранированный дефис, так что он не должен быть зависимым от положения. Это \- внутри класса символов в квадратных скобках.

Но есть еще кое-что. Некоторые из перечисленных перечислений должны быть написаны по-разному. В некоторых случаях они определенно должны.

Это comparison ароматов регулярных выражений говорит о том, что C♯ может использовать некоторые из простых свойств Unicode. Если вы имеете дело с Unicode, вы, вероятно, должны использовать общую категорию \p{L} для всех возможных букв и, возможно, \p{Nd} для десятичных чисел. Кроме того, если вы хотите разместить всю эту пунктирную пунктирность, а не только HYPHEN-MINUS, вы должны использовать свойство \p{Pd} . Вы также можете написать эту последовательность символов пробелов просто как \s , считая, что это не слишком общее для вас.

Все вместе, это работает с параметром [\p{L}\p{Nd}\p{Pd}!$*] Чтобы соответствовать любому символу из этого набора.

Я бы, вероятно, использовал это в любом случае, даже если бы я не планировал иметь дело с полным набором Unicode, потому что это хорошая привычка, и потому, что эти вещи часто выходят за рамки их первоначальных параметров. Теперь, когда вы поднимаете его для использования в другом коде, он все равно будет работать правильно. Если вы будете жестко закодировать все символы, это не произойдет.


Это то, что вам нужно?

MatchCollection matches = Regex.Matches(mystring, "-");

используйте «\ p {Pd}» без кавычек, чтобы соответствовать любому типу дефиса. Символ '-' - это всего лишь один тип дефиса, который также является особым символом в Regex.





regex