Как переписать шаблон [a-zA-Z0-9!$* \t\r\n]
в соответствие с дефисами вместе с существующими символами?Как сопоставить дефисы с регулярным выражением?
ответ
Побег дефиса.
[a-zA-Z0-9!$* \t\r\n\-]
UPDATE:
Ничего этот ответ - вы можете добавить дефис в группе, но вы не должны избежать. См. Konrad Rudolph's answer, а это намного лучше отвечает на вопросы и объясняет, почему.
Полностью не нужно. –
О, не так ли? Это потому, что это в группе персонажей? Виноват. –
@KonradRudolph Вы правы, но я не уверен, что невыпущенная версия легче понять. Два возможных способа использования тире сбивают с толку, поэтому перед этим есть вопросы об этом. Это, безусловно, более элегантно, как только вы об этом знаете, но для новичков это немного запутанно. –
Вы ищите это после вас?
MatchCollection matches = Regex.Matches(mystring, "-");
Дефис обычно является нормальным символом в регулярных выражениях. Только если он находится в символьном классе и между двумя другими символами, это имеет особое значение.
Таким образом:
[-]
соответствует дефис.[abc-]
соответствуетa
,b
,c
или дефис.[-abc]
соответствуетa
,b
,c
или дефис.[ab-d]
соответствуетa
,b
,c
илиd
(только здесь дефис обозначает диапазон символов).
@rrr Вы хотите, чтобы он написал его для вас, а также изложил его? Все, что вам нужно сделать, это добавить дефис в группу. –
@rrrr: Я действительно верю, что я дал ответ. Вопрос заключался в том, «как писать« X »...», и я считаю, что объяснил, как это сделать. Принимая мой ответ и применяя объяснение к фактическому выражению под рукой, не должно требоваться больше навыков познания, чем требуется первокласснику. Фактически, это * точно * то, что первоклассники учатся делать, когда учат основную арифметику. Не стесняйтесь исправить мое предположение. –
[Hyphen взят буквально изнутри класса символов, если он не может сформировать диапазон] (http://stackoverflow.com/questions/29458636/how-does-this-pattern-match-hyphen-without-escape). – MAKZ
Это менее запутанно всегда использовать экранированный дефис, чтобы он не зависел от положения. Это \-
внутри класса символов в квадратных скобках.
Но есть еще кое-что, что нужно учитывать. Некоторые из перечисленных перечислений должны быть написаны по-разному. В некоторых случаях они определенно должны.
Этот comparison ароматизаторов регулярных выражений говорит о том, что C♯ может использовать некоторые из простых свойств Unicode. Если вы имеете дело с Unicode, вы, вероятно, должны использовать общую категорию \p{L}
для всех возможных букв, а возможно\p{Nd}
для десятичных чисел. Кроме того, если вы хотите разместить все эти знаки пунктуации, а не только HYPHEN-MINUS, вы должны использовать свойство \p{Pd}
. Вы также можете написать эту последовательность символов пробелов просто как \s
, предполагая, что это не слишком общее для вас.
Все, что соответствует апаттеру [\p{L}\p{Nd}\p{Pd}!$*]
, чтобы соответствовать любому символу из этого набора.
Я бы, вероятно, использовал это, даже если бы я не планировал иметь дело с полным набором Unicode, потому что это хорошая привычка, и потому, что эти вещи часто выходят за рамки их первоначальных параметров. Теперь, когда вы поднимаете его для использования в другом коде, он все равно будет работать правильно. Если вы будете жестко закодировать все символы, это не произойдет.
Я, как правило, согласен с этим ответом, тем меньше вам нужно знать более безопасный код. Это напоминает мне проблемы с приоритетами оператора: http://stackoverflow.com/questions/10007140/operator-precedence-and-ternary-operator, я беру их в круглых скобках (автоматически добавляемый моей IDE), не нужно знать их всех , Вы или кто-то еще может испортить рано или поздно. Конечно, если вы много работаете с регулярным выражением в своих проектах, вам может потребоваться более продвинутое знание. –
использовать «\ p {Pd}» без кавычек, чтобы соответствовать любому типу дефиса.Символ '-' - это всего лишь один тип дефиса, который также является особым символом в Regex.
[-a-z0-9] +, [a-z0-9 -] +, [az-0-9] +, а также [az-0-9] + все одинаковы. Дефис между двумя диапазоны, рассматриваемые как символ. И также [a-z0-9 - +()] + это регулярное выражение допускает дефис.
- 1. Как сопоставить {1,0} с регулярным выражением?
- 2. Как сопоставить файл с регулярным выражением?
- 3. Как сопоставить определенную строку с регулярным выражением?
- 4. Как сопоставить список писем с регулярным выражением с запятой?
- 5. смерч, Как сопоставить URL и обработчик с регулярным выражением, как
- 6. Проблемы с регулярным выражением
- 7. Как сопоставить строку определенной длины с регулярным выражением
- 8. Как сопоставить действительные слова с регулярным выражением ruby
- 9. Как сопоставить доменные имена с регулярным выражением, опуская поддомены?
- 10. Как я могу сопоставить самый вложенный комментарий с регулярным выражением?
- 11. Как сопоставить диакритические знаки с регулярным выражением в TSQL
- 12. Как я могу сопоставить серии | с регулярным выражением Java?
- 13. Как сопоставить фиксированное количество цифр с регулярным выражением в PHP?
- 14. Как мне сопоставить аргументы в круглых скобках с регулярным выражением?
- 15. Как сопоставить скобки ввода с регулярным выражением в JavaScript?
- 16. Как сопоставить скобки с регулярным выражением в ruby
- 17. Как я могу сопоставить этот шаблон с регулярным выражением?
- 18. Как я могу сопоставить все с регулярным выражением PHP?
- 19. Как правильно сопоставить строковый литерал Python с регулярным выражением?
- 20. Как сопоставить $ 123 $, $$, $, но не $ 123 с регулярным выражением?
- 21. Как я могу сопоставить адреса IPv6 с регулярным выражением Perl?
- 22. Как сопоставить вложенные повторяющиеся группы с регулярным выражением в Java?
- 23. Как я могу сопоставить этот сложный шаблон с регулярным выражением?
- 24. Соответствие строки с регулярным выражением?
- 25. Соответствие Jsoup с регулярным выражением
- 26. Борьба с регулярным выражением числа
- 27. Попытка сопоставить строку, содержащую только пробелы с регулярным выражением
- 28. Сопоставить последнюю группу внутри _() _ с регулярным выражением в Ruby
- 29. Я не могу сопоставить простое имя пользователя с регулярным выражением?
- 30. Как отлично совместить прокси с регулярным выражением?
вместо добавления пространства и \ t вы можете добавить \ s. \ s соответствует другим типам белых пространств, а также –