Как переписать шаблон [a-zA-Z0-9!$* \t\r\n]
для соответствия дефиса вместе с существующими символами?
Как сопоставить дефисы с регулярным выражением?
Ответ 1
Побег дефиса.
[a-zA-Z0-9!$* \t\r\n\-]
UPDATE:
Не берите в голову этот ответ - вы можете добавить дефис в группу, но вам не нужно его избегать. См. ответ Конрада Рудольфа, который намного лучше отвечает и объясняет, почему.
Ответ 2
Дефис обычно является нормальным символом в регулярных выражениях. Только если его в символьном классе и между двумя другими символами имеет особое значение.
Таким образом:
-
[-]
соответствует дефис. -
[abc-]
соответствуетa
,b
,c
или дефис. -
[-abc]
соответствуетa
,b
,c
или дефис. -
[ab-d]
соответствуетa
,b
,c
илиd
(только здесь дефис обозначает диапазон символов).
Ответ 3
Его менее запутанно всегда использовать экранированный дефис, так что он не должен быть позиционно зависимым. Это \-
внутри класса символов в квадратных скобках.
Но что-то еще нужно рассмотреть. Некоторые из перечисленных перечислений должны быть написаны по-разному. В некоторых случаях они определенно должны.
Этот сравнение ароматов regex говорит, что C♯ может использовать некоторые из более простых свойств Unicode. Если вы работаете с Unicode, вы, вероятно, должны использовать общую категорию \p{L}
для всех возможных букв и, возможно, \p{Nd}
для десятичных чисел. Кроме того, если вы хотите разместить всю эту пунктирную пунктирность, а не только HYPHEN-MINUS, вы должны использовать свойство \p{Pd}
. Вы также можете написать эту последовательность символов пробелов просто как \s
, считая, что это не слишком общее для вас.
Все вместе, это работает для apattern [\p{L}\p{Nd}\p{Pd}!$*]
, чтобы соответствовать любому одному символу из этого набора.
Идентификатор, вероятно, использует это так или иначе, даже если бы я не планировал иметь дело с полным набором Unicode, потому что у него хорошая привычка проникать, и потому что эти вещи часто выходят за рамки их первоначальных параметров. Теперь, когда вы поднимаете его для использования в другом коде, он все равно будет работать правильно. Если вы скопируете все символы, это не будет.
Ответ 4
Это то, что вы после?
MatchCollection matches = Regex.Matches(mystring, "-");
Ответ 5
используйте "\ p {Pd}" без кавычек, чтобы соответствовать типу дефиса. Символ '-' - это всего лишь один тип дефиса, который также является особым символом в Regex.
Ответ 6
[- a-z0-9] +, [a-z0-9 -] +, [az-0-9] +, а также [az-0-9] + все одинаковы. Дефис между двумя диапазонами рассматривается как символ. А также [a-z0-9 - +()] + это регулярное выражение разрешает дефис.