Рубрики
Без рубрики

Python Regex Sub.

Хотите заменить все вхождения шаблона в строке? Ты в нужном месте! Функция REGEX RE 2SSUB (P, R, S) заменяет все вхождения рисунка P с заменой R в строке S. Это возвращает новую строку. Например, если вы звоните Re.Sub («A», «B», «AABB»), результат будет … Python Regex Sub Подробнее »

Автор оригинала: Chris.

Хотите заменить все вхождения шаблона в строке? Ты в нужном месте!

Функция Regex Re.Sub (P, R, S) заменяет все вхождения шаблона P С заменой R в строке S Отказ Возвращает новую строку. Например, если вы звоните Re.Sub («A», «B», «AABB») результат будет новая строка «BBBB» со всеми персонажами «А» заменен на 'b' Отказ

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

Связанная статья: Python Regex SuperPower – Ultimate Guide

Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.

Давайте ответим на следующий вопрос:

Как работает re.sub () в Python?

Re.sub (шаблон, репрекс, строка ,,) Метод возвращает новую строку, где все вхождения шаблон В старой строке заменяется Реп Отказ

Вот минимальный пример:

>>> import re
>>> text = 'C++ is the best language. C++ rocks!'
>>> re.sub('C\+\+', 'Python', text)
'Python is the best language. Python rocks!'
>>> 

Текст содержит два вхождения строки 'C ++' Отказ Вы используете Re.sub () Способ поиска всех этих вхождений. Ваша цель – заменить все те, которые с новой строкой «Питон» (Python – лучший язык в конце концов).

Обратите внимание, что вы должны избежать '+' Символ в 'C ++' Как иначе это будет означать По крайней мере, один регеекс Отказ

Вы также можете увидеть, что sub () Способ заменяет все сопоставленные шаблоны в строке – не только первый.

Но есть больше! Давайте посмотрим на официальное определение sub () метод.

Технические характеристики

re.sub(pattern, repl, string, count=0, flags=0)

Способ имеет четыре аргумента – два из которых являются необязательными.

  • шаблон : Шаблон регулярного выражения для поиска строк, которые вы хотите заменить.
  • Реп : замена строки или функция. Если это функция, она должна принять один аргумент (общий объект ), который передается для каждого возникновения шаблона. Возвращаемое значение функции замены представляет собой строку, которая заменяет соответствующую подстроку.
  • строка : текст, который вы хотите заменить.
  • Считать (Дополнительный аргумент): максимальное количество замены, которые вы хотите выполнить. По умолчанию вы используете count = 0 который читает как Заменить все вхождения шаблона Отказ
  • Флаги (Дополнительный аргумент): более продвинутый модификатор, который позволяет настроить поведение метода. По умолчанию вы не используете никаких флагов. Хотите знать Как использовать эти флаги? Проверьте эту подробную статью на блог Finxter.

Первоначальные три аргумента необходимы. Остальные два аргумента являются необязательными.

Вы узнаете о этих аргументах более подробно позже.

Возвращаемое значение:

Новая строка, где считать вхождения первых подстроек, которые соответствуют шаблон заменены на строковое значение, определенное в рентген аргумент

Regex Sub Минимальный пример

Давайте изучим еще несколько примеров – от простых до сложных.

Самое простое использование имеет только три аргумента: шаблон «петь » «Слава замена «Программа» И строка, которую вы хотите изменить ( Text в нашем примере).

>>> import re
>>> text = 'Learn to sing because singing is fun.'
>>> re.sub('sing', 'program', text)
'Learn to program because programing is fun.'

Просто не игнорируйте ошибку грамматики на данный момент. Вы получаете точку: мы не будем петь, мы программируем.

Но что, если вы хотите на самом деле исправить эту ошибку грамматики? В конце концов, это Программирование , не Программирование Отказ В этом случае нам нужно заменить «петь» с «Программа» в некоторых случаях и «петь» с «Программа» в других случаях.

Вы видите, где это приводит нас: Sub Аргумент должен быть функцией! Итак, давайте попробуем это:

import re


def sub(matched):
    if matched.group(0)=='singing':
        return 'programming'
    else:
        return 'program'


text = 'Learn to sing because singing is fun.'
print(re.sub('sing(ing)?', sub, text))
# Learn to program because programming is fun.

В этом примере вы сначала определяете функцию замещения Sub Отказ Функция принимает соответствующий объект в качестве ввода и возвращает строку. Если это соответствует более длительной форме «пение» , он возвращает «Программирование» Отказ Иначе это соответствует более короткой форме «петь» Итак, он возвращает более короткую замену строки «Программа» вместо.

Как использовать подсчет аргумента метода Regeex?

Что делать, если вы не хотите заменить все вхождения узора, но только ограниченное количество их? Просто используйте Считать АРУДА! Вот пример:

>>> import re
>>> s = 'xxxxxxhelloxxxxxworld!xxxx'
>>> re.sub('x+', '', s, count=2)
'helloworld!xxxx'
>>> re.sub('x+', '', s, count=3)
'helloworld!'

В первой операции замены вы заменяете только два вхождения шаблона 'x +' Отказ Во-вторых, вы заменяете все три.

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

>>> re.sub('x+', '', s, 3)
'helloworld!'

Но столько кодеров не знают о Считать Аргумент, вы, вероятно, должны использовать аргумент ключевых слов для читабельности.

Как использовать дополнительный аргумент флага?

Как вы видели в спецификации, Re.sub () Метод поставляется с необязательной четвертой Флаг Аргумент:

re.sub(pattern, repl, string, count=0, flags=0)

Какова цель Флаги Аргумент ?

Флаги позволяют управлять регулярным механизмом выражения. Поскольку регулярные выражения настолько мощны, они являются полезным способом включения и отключения определенных функций (например, следует ли игнорировать капитализацию при сопоставлении вашего Regex).

Синтаксис Имея в виду
Re.ascii. Если вы не используете этот флаг, специальные символы Regex Python W, W, B, B, D, D, S и S будут соответствовать символам Unicode. Если вы используете этот флаг, эти специальные символы будут соответствовать только символам ASCII – как указано имя.
реаяна Так же, как Re.Ascii
Re.debug. Если вы используете этот флаг, Python распечатает некоторую полезную информацию в оболочку, которая помогает отладить ваше регулярное выражение.
Re.ignorecase. Если вы используете этот флаг, двигатель Regex будет выполнять совпадение в случае сопоставления. Поэтому, если вы ищете [A-Z], он также будет соответствовать [A-Z].
Re.i. Так же, как Re.ignoRecase
Re.Locale Не используйте этот флаг – когда-либо. Он обесценился – идея состояла в том, чтобы выполнить сопоставление нечувствительности к регистру в зависимости от вашей текущей местности. Но это не надежно.
решающее значение Так же, как Re.Locale
Re.multiline. Этот флаг включает в следующую функцию: начало строки Regex ‘^’ совпадает в начале каждой строки (а не только в начале строки). То же самое относится и к концу строки Regex ‘$’, который сейчас соответствует также в конце каждой строки в многострочной строке.
решающее значение Так же, как Re.multiline.
re.dotall. Без использования этого флага точечное регулярное выражение. ‘ Соответствует всем персонажам, кроме нового символа «n». Переключите этот флаг, чтобы действительно сопоставить все символы, включая новенький символ.
республика Так же, как Re.dotall.
Re.verbose. Чтобы улучшить читаемость сложных регулярных выражений, вы можете позволить комментариям и (многострочному) форматированию самого Regeex. Это возможно с этим флагом: все пробелы и строки, которые начинаются с символа «#», игнорируются в Regex.
re.x. Так же, как Re.verbose

Вот как бы вы использовали его в минимальном примере:

>>> import re
>>> s = 'xxxiiixxXxxxiiixXXX'
>>> re.sub('x+', '', s)
'iiiXiiiXXX'
>>> re.sub('x+', '', s, flags=re.I)
'iiiiii'

Во второй операции замены вы игнорируете капитализацию с помощью флага Re.i который коротко для Re.ignoRecase Отказ Вот почему это заменит даже верхний регистр 'X' Персонажи, которые сейчас соответствуют Regex 'x +' , тоже.

В чем разница между регелем Sub и String заменить?

В некотором смысле, Re.sub () Метод является более мощным вариантом String.replace () Метод подробно описан в этой статье блога Finxter Отказ

Почему? Поскольку вы можете заменить все вхождения рисунка Regex, а не только все вхождения строки в другой строке.

Так с Re.sub () Вы можете сделать все, что вы можете сделать с String.replace () -Ну-но некоторые вещи больше!

Вот пример:

>>> 'Python is python is PYTHON'.replace('python', 'fun')
'Python is fun is PYTHON'
>>> re.sub('(Python)|(python)|(PYTHON)', 'fun', 'Python is python is PYTHON')
'fun is fun is fun'

String.replace () Способ заменяет только строчное слово «Питон» пока Re.sub () Способ заменяет все вхождения заглавных или строчных вариантов.

Примечание, вы можете сделать то же самое еще проще с Флаги аргумент

>>> re.sub('python', 'fun', 'Python is python is PYTHON', flags=re.I)
'fun is fun is fun'

Как удалить рисунок Regex в Python?

Ничего проще, чем это. Просто используйте пустую строку как строку замены:

>>> re.sub('p', '', 'Python is python is PYTHON', flags=re.I)
'ython is ython is YTHON'

Вы заменяете все вхождения шаблона 'p' с пустой строкой '' Отказ Другими словами, вы удалите все вхождения 'p' Отказ Как вы используете Флаги = Re.i Аргумент, вы игнорируете капитализацию.

Связанные методы Re

Есть пять важных методов регулярного выражения, которые вы должны освоить:

  • Re.findall (шаблон, строка) Метод возвращает список строковых совпадений. Читайте больше в Наше руководство в блоге Отказ
  • Re.Search (шаблон, строка) Метод возвращает объект совпадения первого матча. Читайте больше в Наше руководство в блоге Отказ
  • Re.match (шаблон, строка) Метод Возвращает объект совпадения, если установки Regeex в начале строки. Читайте больше в Наше руководство в блоге Отказ
  • Re.fullmatch (шаблон, строка) Метод возвращает объект совпадения, если Regeex соответствует всей строке. Читайте больше в Наше руководство в блоге Отказ
  • Re.compile (Pattern) Способ подготавливает шаблон регулярной экспрессии – и возвращает объект Regex, который вы можете использовать несколько раз в вашем коде. Читайте больше в Наше руководство в блоге Отказ
  • Re.Split (шаблон, строка) Метод возвращает список строк, сопоставив все вхождения шаблона в строке и разделить строку вдоль тех. Читайте больше в Наше руководство в блоге Отказ
  • Re.sub (шаблон, репрекс, строка ,,) Метод возвращает новую строку, в которой все вхождения шаблона в старой строке заменены на Реп Отказ Читайте больше в Наше руководство в блоге Отказ

Эти семь методов составляют 80% от того, что вам нужно знать, чтобы начать работу с функциональностью регулярных выражений Python.

Резюме

Вы узнали Re.sub (шаблон, репрекс, строка ,,) Метод возвращает новую строку, где все вхождения шаблон В старом строка заменяются на Реп Отказ

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.