Python.03.02 Регулярные выражения (часть 1)

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 พ.ย. 2024

ความคิดเห็น • 8

  • @ИванТемирович
    @ИванТемирович 8 ปีที่แล้ว

    Спасибо!хорошая лекция.

  • @q1dsdsdsq2dssdsd95
    @q1dsdsdsq2dssdsd95 7 ปีที่แล้ว

    Здравствуйте! Прошу помощи! Нужно при помощи регулярных выражений удалить все повторяющиеся слова из строки (Привет, привет, привет! мир, мир ... мир, мир, мир!) Подскажите, пожалуйста, как подступиться?

  • @Neistoviy
    @Neistoviy 8 ปีที่แล้ว

    Здравствуйте! Спасибо за уроки! С удовольствием смотрю и учусь.
    Возник вопрос к знатокам. Я хочу найти в строке фамилии, начинающиеся на "П" и оканчивающиеся на "н".
    print (re.findall('П.*?н', 'Митрофанов, Пронякин, Малкин, Пирожкин' ))
    Однако в итоге я получаю следующее:
    ['Прон', 'Пирожкин']
    То есть фамилию Пронякин обрубает до первой встречающейся "н" и выводит. Что мне, разумеется, не нужно.
    Что необходимо сделать для правильного решения задачи? Спасибо!

    • @python4198
      @python4198  8 ปีที่แล้ว +1

      Добрый день!
      Для вашего примера, например, можно сделать так:
      print(re.findall('П\w*н(?!\w)', 'Митрофанов, Пронякин, Малкин, Пирожкин' ))
      Во-первых, .* может плохо сработать в примере 'Пешков, Митрофанов', вы получите 'Пешков, Митрофан'. Поэтому лучше воспользоваться \w, в который не входят знаки препинания и пробелы.
      Во-вторых, предлагаю воспользоваться отрицательным заглядыванием вперед, чтобы проверять, что мы находимся в конце слова.
      В-тертьих, вроде бы с \w не будет иметь смысла отключать жадность.

    • @Neistoviy
      @Neistoviy 8 ปีที่แล้ว

      Спасибо большое за подробное разъяснение!

  • @_dimitrich_4511
    @_dimitrich_4511 7 ปีที่แล้ว

    Крышичка)))

  • @bonjovi8610
    @bonjovi8610 5 ปีที่แล้ว +1

    Вообще никаких объяснений! Был бы неплохо услышать объяснения в каком месте слово содержится (подходит) в регулярном выражении в примерах. Про жадность вообще не понятно. Объясните, что значит (между любое количество любых символов, так?) и что значит

    • @python4198
      @python4198  5 ปีที่แล้ว +2

      Давайте попробую пояснить. Жадность здесь стоит понимать в обычном алгоритмическом смысле. Жадные алгоритмы, как правило, пытаются что-то делать, пока могут. '' будет набирать символы до самой последней > в тексте. Если у вас есть строка '... Title ... ', то под это регулярное выражение попадёт максимально возможное количество символов, а именно 'Title'. Не до первой, а до последней. Зачастую это не то, что требуется. Если нам хотелось вычленить только название тега '', то жадность (набирание максимально длинной строки) нужно отключить. Это и делает добавление символа вопрос. Регулярное выражение '' поймает лишь ''. Такого нежадного поведения можно было добиться, написав ']*>'.
      Попробуйте поэкспериментировать самостоятельно. Придумывайте свои примеры, делайте предположение, что Python сделает, а потом проверяйте их.
      В этом примере мы пытаемся распарсить регулярными выражениями html. Это делается для демонстрации. Если вам нужно как-то взаимодействовать с html, например, вы хотите скачать все страницы, на которые ссылается данная, то лучше использовать для этого специализированные модули, которые имеют больше знаний о устройстве html.