Как захватить. // с помощью регулярных выражений python?

#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/iN3tH8

3. [./] это означает точку или / символ один или несколько раз. Так что это соответствует .. , // , ./ , /.

Ответ №2:

В этом случае, я думаю, вам не нужно в [] . Я думаю , используется просто как escape-символ. Но вам не нужно использовать in [] в регулярных выражениях Python. Потому что символы автоматически экранируются в [] .

Поэтому используйте регулярное [./] выражение вместо [./] .

пример:

 >>> import re
>>> s = ".//2005 Neuropathophys.doc"
>>> re.match("[./] ", s).group()
'.//'
  

Комментарии:

1. Спасибо! Однако, как мне убедиться, что я не получаю совпадение с . in .doc?

2. @user3314418 Используется . [/] только для сопоставления таких вещей, как .// или ...//// и т. Д.