Совпадение шаблона со специальным символом & ldquo; - & rdquo; дефис работает не так, как ожидалось.? [Дубликат]

Вот что я имел (file уже назначен пути к файлу с исходным кодом в обоих примерах):

execfile(file)

Вот что я заменил на него:

exec(compile(open(file).read(), file, 'exec'))

Моя любимая часть: вторая версия отлично работает как в Python 2, так и в 3, то есть нет необходимости добавлять в зависимую от версии логику.

49
задан Thomas Anderson 1 November 2010 в 13:02
поделиться

6 ответов

51
ответ дан Community 21 August 2018 в 05:42
поделиться

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

MatchCollection matches = Regex.Matches(mystring, "-");
2
ответ дан Aliostad 21 August 2018 в 05:42
поделиться

Дефис обычно является нормальным символом в регулярных выражениях.

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

  • [-] соответствует дефису.
  • [abc-] соответствует a, b, c или дефис.
  • [-abc] соответствует a, b, c или дефис.
  • [ab-d] соответствует a, b, c или d ( только здесь дефис обозначает диапазон символов).
128
ответ дан Konrad Rudolph 21 August 2018 в 05:42
поделиться
  • 1
    – Neil Barnwell 1 November 2010 в 13:29
  • 2
    @rrrr: Я верю, что дал ответ. Вопрос заключался в том, «как писать« X »...», и я считаю, что объяснил, как это сделать. Принимая мой ответ и применяя объяснение к фактическому выражению под рукой, не должно требоваться больше навыков познания, чем требуется первокласснику. Фактически, это точно , чему учатся первоклассники, когда они учат базовой арифметике. Не стесняйтесь исправить мое предположение. – Konrad Rudolph 1 November 2010 в 13:30
  • 3
  • 4
    @MarkP Ну, duh: шестнадцатеричные коды символов преобразуются с помощью анализатора интерфейса (из C # или JavaScript или любого другого языка, который вы используете) в фактический символ. Таким образом, использование шестнадцатеричных кодов совпадает с использованием фактических символов в отношении значения строки. – Konrad Rudolph 21 November 2015 в 19:21
  • 5
    @Pshemo Конечно, глупая ошибка. Что касается интерпретации в [a-c-e]: это просто неверно в некоторых спецификациях / механизмах регулярных выражений. Репозит POSIX, например, запрещает его. – Konrad Rudolph 2 November 2016 в 18:32

[- a-z0-9] +, [a-z0-9 -] +, [az-0-9] +, а также [az-0-9] + все одинаковы. Дефис между двумя диапазонами рассматриваемый как символ. А также [a-z0-9 - + ()] + это регулярное выражение допускает дефис.

1
ответ дан Parimala 21 August 2018 в 05:42
поделиться
  • 1
    Должен быть один из лучших ответов. – Razor's Edge 24 May 2018 в 07:15

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

0
ответ дан Radu Simionescu 21 August 2018 в 05:42
поделиться

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

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

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

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

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

10
ответ дан tchrist 21 August 2018 в 05:42
поделиться
  • 1
    Я склонен согласиться с этим ответом, тем меньше вам нужно знать, насколько безопаснее код. Это напоминает мне проблемы с приоритетами оператора: stackoverflow.com/questions/10007140/… , я получаю скобки в них (автоматически добавляется моей IDE), не нужно знать их всех. Вы или кто-то еще может испортить рано или поздно. Конечно, если вы много работаете с регулярным выражением в своих проектах, вам может потребоваться более продвинутое знание. – Christophe Roussy 15 July 2014 в 13:54
Другие вопросы по тегам:

Похожие вопросы: