Здравствуйте! Прошу помощи! Нужно при помощи регулярных выражений удалить все повторяющиеся слова из строки (Привет, привет, привет! мир, мир ... мир, мир, мир!) Подскажите, пожалуйста, как подступиться?
Здравствуйте! Спасибо за уроки! С удовольствием смотрю и учусь. Возник вопрос к знатокам. Я хочу найти в строке фамилии, начинающиеся на "П" и оканчивающиеся на "н". print (re.findall('П.*?н', 'Митрофанов, Пронякин, Малкин, Пирожкин' )) Однако в итоге я получаю следующее: ['Прон', 'Пирожкин'] То есть фамилию Пронякин обрубает до первой встречающейся "н" и выводит. Что мне, разумеется, не нужно. Что необходимо сделать для правильного решения задачи? Спасибо!
Добрый день! Для вашего примера, например, можно сделать так: print(re.findall('П\w*н(?!\w)', 'Митрофанов, Пронякин, Малкин, Пирожкин' )) Во-первых, .* может плохо сработать в примере 'Пешков, Митрофанов', вы получите 'Пешков, Митрофан'. Поэтому лучше воспользоваться \w, в который не входят знаки препинания и пробелы. Во-вторых, предлагаю воспользоваться отрицательным заглядыванием вперед, чтобы проверять, что мы находимся в конце слова. В-тертьих, вроде бы с \w не будет иметь смысла отключать жадность.
Вообще никаких объяснений! Был бы неплохо услышать объяснения в каком месте слово содержится (подходит) в регулярном выражении в примерах. Про жадность вообще не понятно. Объясните, что значит (между любое количество любых символов, так?) и что значит
Давайте попробую пояснить. Жадность здесь стоит понимать в обычном алгоритмическом смысле. Жадные алгоритмы, как правило, пытаются что-то делать, пока могут. '' будет набирать символы до самой последней > в тексте. Если у вас есть строка '... Title ... ', то под это регулярное выражение попадёт максимально возможное количество символов, а именно 'Title'. Не до первой, а до последней. Зачастую это не то, что требуется. Если нам хотелось вычленить только название тега '', то жадность (набирание максимально длинной строки) нужно отключить. Это и делает добавление символа вопрос. Регулярное выражение '' поймает лишь ''. Такого нежадного поведения можно было добиться, написав ']*>'. Попробуйте поэкспериментировать самостоятельно. Придумывайте свои примеры, делайте предположение, что Python сделает, а потом проверяйте их. В этом примере мы пытаемся распарсить регулярными выражениями html. Это делается для демонстрации. Если вам нужно как-то взаимодействовать с html, например, вы хотите скачать все страницы, на которые ссылается данная, то лучше использовать для этого специализированные модули, которые имеют больше знаний о устройстве html.
Спасибо!хорошая лекция.
Здравствуйте! Прошу помощи! Нужно при помощи регулярных выражений удалить все повторяющиеся слова из строки (Привет, привет, привет! мир, мир ... мир, мир, мир!) Подскажите, пожалуйста, как подступиться?
Здравствуйте! Спасибо за уроки! С удовольствием смотрю и учусь.
Возник вопрос к знатокам. Я хочу найти в строке фамилии, начинающиеся на "П" и оканчивающиеся на "н".
print (re.findall('П.*?н', 'Митрофанов, Пронякин, Малкин, Пирожкин' ))
Однако в итоге я получаю следующее:
['Прон', 'Пирожкин']
То есть фамилию Пронякин обрубает до первой встречающейся "н" и выводит. Что мне, разумеется, не нужно.
Что необходимо сделать для правильного решения задачи? Спасибо!
Добрый день!
Для вашего примера, например, можно сделать так:
print(re.findall('П\w*н(?!\w)', 'Митрофанов, Пронякин, Малкин, Пирожкин' ))
Во-первых, .* может плохо сработать в примере 'Пешков, Митрофанов', вы получите 'Пешков, Митрофан'. Поэтому лучше воспользоваться \w, в который не входят знаки препинания и пробелы.
Во-вторых, предлагаю воспользоваться отрицательным заглядыванием вперед, чтобы проверять, что мы находимся в конце слова.
В-тертьих, вроде бы с \w не будет иметь смысла отключать жадность.
Спасибо большое за подробное разъяснение!
Крышичка)))
Вообще никаких объяснений! Был бы неплохо услышать объяснения в каком месте слово содержится (подходит) в регулярном выражении в примерах. Про жадность вообще не понятно. Объясните, что значит (между любое количество любых символов, так?) и что значит
Давайте попробую пояснить. Жадность здесь стоит понимать в обычном алгоритмическом смысле. Жадные алгоритмы, как правило, пытаются что-то делать, пока могут. '' будет набирать символы до самой последней > в тексте. Если у вас есть строка '... Title ... ', то под это регулярное выражение попадёт максимально возможное количество символов, а именно 'Title'. Не до первой, а до последней. Зачастую это не то, что требуется. Если нам хотелось вычленить только название тега '', то жадность (набирание максимально длинной строки) нужно отключить. Это и делает добавление символа вопрос. Регулярное выражение '' поймает лишь ''. Такого нежадного поведения можно было добиться, написав ']*>'.
Попробуйте поэкспериментировать самостоятельно. Придумывайте свои примеры, делайте предположение, что Python сделает, а потом проверяйте их.
В этом примере мы пытаемся распарсить регулярными выражениями html. Это делается для демонстрации. Если вам нужно как-то взаимодействовать с html, например, вы хотите скачать все страницы, на которые ссылается данная, то лучше использовать для этого специализированные модули, которые имеют больше знаний о устройстве html.