Строка, которая заканчивается символом подчеркивания - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь найти правильное регулярное выражение, которое обнаруживает строку, заканчивающуюся одним подчеркиванием, например hello_, this_. Пока у меня есть re.match("[aA-zZ](_)", string), но он обнаруживает строки типа, day__, ball__, т.е. с двумя подчеркиваниями, которые я не хочу. Любые идеи, как получить строку с одним подчеркиванием в конце.

Спасибо

Ответы [ 4 ]

6 голосов
/ 31 мая 2019

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

re.search(r"(?<!_)_$", s)

См. Демоверсию regex .Смотрите график регулярных выражений:

enter image description here

Подробности

  • (?<!_) - отрицательный взгляд за , который гарантирует, что _ нет непосредственно слева от текущей позиции
  • _ - подчеркивание
  • $ - конец строки.

Обратите внимание, что вам нужно re.search, которое ищет совпадение в любом месте строки, а не re.match, которое соответствует только в начале строки.

3 голосов
/ 31 мая 2019

Я знаю, что вы запросили регулярное выражение, но это можно сделать также просто:

s = "hello__"

s.endswith("_") and not s[:-1].endswith("_")
# False
3 голосов
/ 31 мая 2019

Вы также можете обновить свой класс символов, чтобы использовать a-z и A-Z, а затем сопоставить одно подчеркивание:

[a-zA-Z]_$

Например, используя re.search

pattern = "[a-zA-Z]_$"
re.search(pattern, "day__")

Демо Python

Обратите внимание, что [aA-zZ], который совпадает с [A-z] , отличается от [a-zA-Z]

3 голосов
/ 31 мая 2019

Вы можете использовать это регулярное выражение:

REGEX = re.compile(r'[^_]_$')
REGEX.search(string)`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...