#python #regex
#python #регулярное выражение
Вопрос:
Почему это не работает? В поисковике регулярных выражений оно совпадает. Я пытаюсь захватить .//
в строках
pat = '[./] (?!(docx|doc|pdf))'
bad = re.compile(pat)
bad.findall(tails[1])
print tails[1]
".//2005 Neuropathophys.doc"
Этот шаблон, похоже, работает на веб-сайте сопоставления регулярных выражений http://regex101.com /
Ответ №1:
Ваше регулярное выражение будет соответствовать приведенному ниже .//
, за которым не следует docx
или doc
или pdf
,
.//(?!docx|doc|pdf)
Комментарии:
1. Я хотел использовать [], чтобы я мог удалить любой соответствующий набор символов пунктуации
2. если вы используете
.
внутри символьного класса, он соответствует одной точке в любом месте вашей строки. Смотрите regex101.com/r/iN3tH83.
[./]
это означает точку или/
символ один или несколько раз. Так что это соответствует..
,//
,./
,/.
Ответ №2:
В этом случае, я думаю, вам не нужно
в []
. Я думаю
, используется просто как escape-символ. Но вам не нужно использовать
in []
в регулярных выражениях Python. Потому что символы автоматически экранируются в []
.
Поэтому используйте регулярное [./]
выражение вместо [./]
.
пример:
>>> import re
>>> s = ".//2005 Neuropathophys.doc"
>>> re.match("[./] ", s).group()
'.//'
Комментарии:
1. Спасибо! Однако, как мне убедиться, что я не получаю совпадение с . in .doc?
2. @user3314418 Используется
. [/]
только для сопоставления таких вещей, как.//
или...////
и т. Д.