Соответствие строки условному символу до и после - PullRequest
3 голосов
/ 19 марта 2019

Регекс всегда вызывает у меня головную боль.Я пытаюсь сопоставить шаблон, где он будет соответствовать только тогда и только тогда, когда оба символа до и после не являются цифрами.Это нормально, если один из символов является цифрой.

Т.е. для строки "Zeitraum vom 1. 6. -30. 6."я пытаюсь сопоставить тире (-), однако шаблон не должен совпадать для «12-3-2019» (где оба символа до и после тире являются цифрами).

В настоящее время я пытаюсь исключить, но это похоже на совпадение, если ни один из символов не является цифрой.

[^\d]-[^\d]

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 марта 2019

Вы можете использовать чередование:

(?<!\d)-|-(?!\d)

Это соответствует дефису, которому не предшествует цифра ИЛИ, за которым не следует цифра

3 голосов
/ 19 марта 2019

Вы можете использовать

r'-(?<!\d-(?=\d))'

См. Демо regex

Это соответствует -, которому не предшествует цифра, и -, чтосразу же с цифрой.

Обратите внимание, что требуется запрос (?=\d), а не простой \d, поскольку (?<!\d-\d) после - сможет провалить совпадение при возврате.

Подробности

  • - - дефис
  • (?<! - начало отрицательного взгляда сзади: провалить совпадение, если непосредственно слева от текущего местоположения есть
    • \d - цифра
    • - - дефис
    • (?=\d) - с последующим \d
  • ) - конец вида сзади
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...