Разное

Re compile python: Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения / Хабр

Функция compile — Документация Python для сетевых инженеров 3.0

В Python есть возможность заранее скомпилировать регулярное выражение, а
затем использовать его. Это особенно полезно в тех случаях, когда
регулярное выражение много используется в скрипте.

Использование компилированного выражения может ускорить обработку, и,
как правило, такой вариант удобней использовать, так как в программе
разделяется создание регулярного выражения и его использование. Кроме
того, при использовании функции re.compile создается объект RegexObject,
у которого есть несколько дополнительных возможностей, которых нет в
объекте MatchObject.

Для компиляции регулярного выражения используется функция re.compile:

In [52]: regex = re.compile(r'\d+ +\S+ +\w+ +\S+')

Она возвращает объект RegexObject:

In [53]: regex
Out[53]: re.compile(r'\d+ +\S+ +\w+ +\S+', re.UNICODE)

У объекта RegexObject доступны такие методы и атрибуты:

In [55]: [method for method in dir(regex) if not method.startswith('_')]
Out[55]:
['findall',
 'finditer',
 'flags',
 'fullmatch',
 'groupindex',
 'groups',
 'match',
 'pattern',
 'scanner',
 'search',
 'split',
 'sub',
 'subn']

Обратите внимание, что у объекта Regex доступны методы search, match,
finditer, findall. Это те же функции, которые доступны в модуле
глобально, но теперь их надо применять к объекту.

Пример использования метода search:

In [67]: line = ' 100    a1b2.ac10.7000    DYNAMIC     Gi0/1'

In [68]: match = regex.search(line)

Теперь search надо вызывать как метод объекта regex. И передать как
аргумент строку.

Результатом будет объект Match:

In [69]: match
Out[69]: <_sre.SRE_Match object; span=(1, 43), match='100    a1b2.ac10.7000    DYNAMIC     Gi0/1'>

In [70]: match.group()
Out[70]: '100    a1b2.ac10.7000    DYNAMIC     Gi0/1'

Пример компиляции регулярного выражения и его использования на примере
разбора лог-файла (файл parse_log_compile.py):

import re

regex = re.compile(r'Host \S+ '
                   r'in vlan (\d+) '
                   r'is flapping between port '
                   r'(\S+) and port (\S+)')

ports = set()

with open('log.txt') as f:
    for m in regex.finditer(f.read()):
        vlan = m.group(1)
        ports.add(m.group(2))
        ports.add(m.group(3))

Использование регулярных выражений в Python.

Регулярные выражения — это шаблоны соответствия текста, описанные в формальном синтаксисе. Шаблоны интерпретируются как набор инструкций, которые затем выполняются со строкой в ​​качестве входных данных для создания соответствующего подмножества или модифицированной версии оригинала. Регулярные выражения могут включать в себя буквальное сопоставление текста, повторение, ветвление и другие сложные правила. Регулярные выражения обычно используются в приложениях, которые требуют тонкую обработку текста.

Модуль re предоставляет операции сопоставления шаблонов регулярных выражений, аналогичные тем, которые встречаются в языке Perl.

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

Шаблоны регулярных выражений и строки для поиска могут быть как Unicode strings, так и 8-битными строками . Однако строки Unicode и 8-битные строки не могут быть смешаны. То есть вы не можете сопоставить строку Unicode с байтовым шаблоном регулярного выражения или наоборот. Аналогично, при замене на основе регулярного выражения строка замены должна быть того же типа, что и регулярное выражение и строка поиска.


Символьные классы и сокращенные обозначения классов.

Квадратные скобки `[]` используются для указания класса символов, который представляет собой набор символов, которым нужно соответствовать. Специальные последовательности могут быть включены в класс символов для обозначения групп последовательности букв, слова, цифр и т. д.

Компиляция регулярных выражений в Python.

Регулярные выражения компилируются в объекты шаблонов, которые имеют методы для различных операций, таких как поиск соответствий шаблонов или выполнение подстановок строк.

Обратный слеш в регулярных выражениях Python.

Чтобы сопоставить обратную косую черту литерала, нужно написать `’\\\\’` как строку шаблона RegExp в Python, потому что регулярное выражение должно быть `\\` и каждая обратная косая черта должна быть выражена как `\\` внутри обычного строкового литерала Python.

Функции уровня модуля re в Python.

В функциях уровня модуля не нужно создавать/компилировать объект шаблона и вызывать его методы. Модуль `re` определяет функции верхнего уровня, такие как `match()`, `search()`, `findall()`, `sub()` и так далее. Шаблон регулярного выражения добавляется в качестве первого аргумента функции.

Флаги объекта регулярного выражения.

Флаги объекта `re.compile()` позволяют изменить некоторые аспекты работы регулярных выражений. Флаги доступны в модуле `re` под двумя именами: длинное имя, например, `re.IGNORECASE` и короткая однобуквенная форма, например `re.I`. Несколько флагов в функции компиляции `re.compile()` могут быть зада

Метасимволы нулевой ширины в RegExp Python.

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

Обратные ссылки регулярного выражения.

Обратные ссылки в шаблоне позволяют указать, что содержимое более ранней группы также должно быть найдено в текущем месте строки. Например обозначение `\1` в шаблоне регулярного выражения будет соответствовать содержимому группы с номером `1`.

Именованные группы регулярных выражениях Python.

Синтаксис имени группы является одним из расширений Python: `(?P<name>…)`. Переменная `name` это название группы. Именованные группы ведут себя точно так же, как группы захвата и дополнительно связывают имя с группой.

Группы без захвата в регулярных выражениях.

Иногда требуется использовать группу для обозначения части регулярного выражения при этом содержимого группы в последствии получать не нужно. Для этого необходимо [использовать группу без захвата: `(?:…)`где `…` заменяется любым регулярным выражением.

Опережающая и ретроспективная проверка позиции в RegExp.

Опережающая проверка анализирует текст, расположенный справа, и проверяет возможность совпадения подвыражения. Если совпадение возможно, проверка считается успешной. Также существует ретроспективная проверка, при которой текст анализируется в обратном направлении, к левому краю.

Деление строки по регулярному выражению.

Функция re.split() делит строку string по соответствиям регулярного выражения. Если в регулярном выражении используются захватывающие скобки, то их содержимое также будет возвращено как часть результирующего списка. Можно ограничить количество выполненных разбиений, передав значение maxsplit.

Функция `re.match()` проверяет совпадение регулярного выражения только в начале строки, в то время как функция `re.search()` будет сканировать строку вперед на предмет первого совпадения с шаблоном. Важно держать это различие в виду.

Жадный квантификатор против не жадного.

При повторении регулярного выражения при помощи `a*`, результирующее действие состоит в том, чтобы захватить как можно больше строки для анализа. Такой шаблон как `'<.*>’` для сопоставления одного HTML тега не работает из-за жадной природы выражения `.*`.

Про Python — Справочник — re (регулярные выражения)

Инструменты для работы с регулярными выражениями.

Регулярное выражение (re, regexp) позволяет описать некоторое множество строк при помощи шаблона для дальнейшего определения того, входит ли какая-либо строка в этом множество. Данный модуль предоставляет инструменты для работы с регулярными выражениями, подобные тем, которые можно обнаружить в языке Perl.

Как шаблоны так и строки, по которым производится поиск, могут являться и строками Юникод (str) и 8-битными строками (bytes).

Смешивать строки и байты не следует: нельзя сличить Юникод-строку с байтовым шаблоном и наоборот; при замене и строка, и шаблон, и заменитель должны быть одного типа.

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

Дабы избежать необходимости экранирования, в качестве шаблонов регулярных выражений можно использовать сырые строки Питона (строки с префиксом r). Например: r'\n' — это строка из двух символов (\ и n), а '\n' — это строка из одного символа, обозначающего переход на новую строку. Шаблоны регулярных выражений в Питоне часто используют сырые строки.

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

Попрактиковаться и отладить регулярные выражения можно на сайте https://regex101.com
Существует сторонний модуль regex с совместимым программным интерфейсом, предлагающий расширенную функциональность и более совершенную поддержку Юникода.

Синонимы поиска: re (регулярные выражения), regexp, регулярка, регулярки

re.compile

Компилирует объект регулярного выражения.для последующего использован…

re.findall

Ищет в строке непересекающиеся вхождения шаблона.

re.fullmatch

Определяет соответствие строки указанному шаблону.

re.match

Ищет соответствие шаблону в начале строки.

re.search

Ищет соответствие шаблону в любом месте строки.

Синтаксис регулярных выражений

Здесь приводится базовая информация о синтаксисе регулярных выражений.

Регулярное выражение в Python с примерами | Комплект 1

Модуль Regular Expressions (RE) указывает набор строк (шаблон), который ему соответствует.
Чтобы понять аналогию RE, MetaCharacters полезны, важны и будут использоваться в функциях модуля re.
Всего имеется 14 метасимволов, и они будут обсуждаться по мере их выполнения в следующих функциях:

  • Функция compile ()
    Регулярные выражения компилируются в объекты шаблонов, которые имеют методы для различных операций, таких как поиск совпадений шаблонов или выполнение подстановок строк.

    import re

      

    p = re.compile('[a-e]')

      

    print(p.findall("Aye, said Mr. Gibenson Stark"))

    Выход:

    ['e', 'a', 'd', 'b', 'e', 'a']
    

    Понимание вывода:
    Первое вхождение — это «е» в «Да», а не «А», так как оно чувствительно к регистру.
    Следующее вхождение — «a» в «сказанном», затем «d» в «сказанном», затем «b» и «e» в «Гибенсоне», последний «а» соответствует «Старку».


    Metacharacter blackslash ‘/’ играет очень важную роль, поскольку сигнализирует о различных последовательностях. Если черный слеш должен использоваться без его специального значения в качестве метасимвола, используйте «//»

    \d   Matches any decimal digit, this is equivalent
         to the set class [0-9].
    \D   Matches any non-digit character.
    \s   Matches any whitespace character.
    \S   Matches any non-whitespace character
    \w   Matches any alphanumeric character, this is
         equivalent to the class [a-zA-Z0-9_].
    \W   Matches any non-alphanumeric character. 

    Заданный класс [/ s ,.] будет соответствовать любому символу пробела, ‘,’ или, ‘.’ ,

    import re

      

    p = re.compile('\d')

    print(p.findall("I went to him at 11 A.M. on 4th July 1886"))

      

    p = re.compile('\d+')

    print(p.findall("I went to him at 11 A.M. on 4th July 1886"))

    Выход:

    ['1', '1', '4', '1', '8', '8', '6']
    ['11', '4', '1886']
    

    import re

      

    p = re.compile('\w')

    print(p.findall("He said * in some_lang."))

      

    p = re.compile('\w+')

    print(p.findall("I went to him at 11 A.M., he said *** in some_language."))

      

    p = re.compile('\W')

    print(p.findall("he said *** in some_language."))

    Выход:

    ['H', 'e', 's', 'a', 'i', 'd', 'i', 'n', 's', 'o', 'm', 'e', '_', 'l', 'a', 'n', 'g']
    ['I', 'went', 'to', 'him', 'at', '11', 'A', 'M', 'he', 'said', 'in', 'some_language']
    [' ', ' ', '*', '*', '*', ' ', ' ', '.']
    

    import re

      

    p = re.compile('ab*')

    print(p.findall("ababbaabbb"))

    Выход:

    ['ab', 'abb', 'a', 'abbb']
    

    Понимание вывода:
    Наше RE — это ab *, который «a» сопровождается любым no. из ‘б’, начиная с 0.
    Вывод ‘ab’, действителен из-за одиночного ‘a’, сопровождаемого одиночным ‘b’.
    Вывод ‘abb’, действителен из-за одинарного ‘a’, сопровождаемого 2 ‘b’.
    Вывод ‘a’, допустим, потому что одиночный ‘a’ сопровождается 0 ‘b’.
    Вывод ‘abbb’, действителен из-за одного ‘a’, сопровождаемого 3 ‘b’.

  • Функция split ()
    Разбить строку по вхождению символа или шаблона, при нахождении этого шаблона оставшиеся символы из строки возвращаются как часть полученного списка.
    Синтаксис:
     re.split(pattern, string, maxsplit=0, flags=0)

    Первый параметр, pattern обозначает регулярное выражение, строка — это заданная строка, в которой будет производиться поиск шаблона и в которой происходит расщепление, maxsplit, если он не предоставлен, считается равным нулю ‘0’, и если предоставляется любое ненулевое значение, то Максимум, что происходит много расколов. Если maxsplit = 1, то строка будет разделена только один раз, что приведет к списку длины 2. Флаги очень полезны и могут помочь сократить код, они не являются необходимыми параметрами, например: flags = re.IGNORECASE, В этом разделении , случай будет проигнорирован.

    from re import split

      

    print(split('\W+', 'Words, words , Words'))

    print(split('\W+', "Word's words Words"))

      

    print(split('\W+', 'On 12th Jan 2016, at 11:02 AM'))

      

    print(split('\d+', 'On 12th Jan 2016, at 11:02 AM'))

    Выход:

    ['Words', 'words', 'Words']
    ['Word', 's', 'words', 'Words']
    ['On', '12th', 'Jan', '2016', 'at', '11', '02', 'AM']
    ['On ', 'th Jan ', ', at ', ':', ' AM']
    

    import re

      

    print(re.split('\d+', 'On 12th Jan 2016, at 11:02 AM', 1))

      

    print(re.split('[a-f]+', 'Aey, Boy oh boy, come here', flags = re.IGNORECASE))

    print(re.split('[a-f]+', 'Aey, Boy oh boy, come here'))

    Выход:

    ['On ', 'th Jan 2016, at 11:02 AM']
    ['', 'y, ', 'oy oh ', 'oy, ', 'om', ' h', 'r', '']
    ['A', 'y, Boy oh ', 'oy, ', 'om', ' h', 'r', '']
    
  • Функция sub ()
    Синтаксис:
     re.sub(pattern, repl, string, count=0, flags=0)

    ‘Sub’ в функции обозначает SubString, в заданной строке выполняется поиск определенного шаблона регулярного выражения (3-й параметр), и после нахождения шаблона подстроки заменяется на repl (2-й параметр), счетчик проверяет и поддерживает количество раз это происходит.

    import re

      

    print(re.sub('ub', '~*' , 'Subject has Uber booked already', flags = re.IGNORECASE))

      

    print(re.sub('ub', '~*' , 'Subject has Uber booked already'))

      

    print(re.sub('ub', '~*' , 'Subject has Uber booked already', count=1, flags = re.IGNORECASE))

      

    print(re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE))

    Выход

    S~*ject has ~*er booked already
    S~*ject has Uber booked already
    S~*ject has Uber booked already
    Baked Beans & Spam
    
  • Функция subn ()
    Синтаксис:
     re.subn(pattern, repl, string, count=0, flags=0)

    subn () во всех отношениях похожа на sub (), за исключением способа вывода. Он возвращает кортеж с общим количеством замен и новой строкой, а не просто строкой.

    import re

    print(re.subn('ub', '~*' , 'Subject has Uber booked already'))

    t = re.subn('ub', '~*' , 'Subject has Uber booked already', flags = re.IGNORECASE)

    print(t)

    print(len(t))

      

    print(t[0])

    Выход

    ('S~*ject has Uber booked already', 1)
    ('S~*ject has ~*er booked already', 2)
    Length of Tuple is:  2
    S~*ject has ~*er booked already
    
    
  • Функция escape ()
    Синтаксис:
    re.escape(string)

    Возвращает строку со всеми не алфавитно-цифровыми обратными слэшами, это полезно, если вы хотите сопоставить произвольную литеральную строку, в которой могут быть метасимволы регулярного выражения.

    import re

      

    print(re.escape("This is Awseome even 1 AM"))

    print(re.escape("I Asked what is this [a-9], he said \t ^WoW"))

    Выход

    This\ is\ Awseome\ even\ 1\ AM
    I\ Asked\ what\ is\ this\ \[a\-9\]\,\ he\ said\ \    \ \^WoW
    
  • Эта статья предоставлена Пиюшем Доорваром . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи [email protected] Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

    Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

    Python compile () Функция | Портал информатики для гиков

    Compile (): рассмотрим ситуацию, когда у нас есть фрагмент кода Python в строке, и мы хотим скомпилировать его, чтобы потом можно было запустить его при необходимости. Метод compile выполняет эту задачу. Он принимает исходный код в качестве входных данных и возвращает объект кода, который готов к выполнению.

    Синтаксис:

    compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
    

    Параметры:

    Source – It can be a normal string, a byte string, or an AST object

    Filename -This is the file from which the code was read. If it wasn’t read from a file, you can give a name yourself.

    Mode – Mode can be exec, eval or single.
    a. eval – If the sorce is a single expression.
    b. exec – It can take a block of a code that has Python statements, class and functions and so on.
    c. single – It is used if consists of a single interactive statement

    Flags (optional) and dont_inherit (optional) – Default value=0. It takes care that which future statements affect the compilation of the source.
    Optimize (optional) – It tells optimization level of compiler. Default value -1.

      

    srcCode = 'x = 10\ny = 20\nmul = x * y\nprint("mul =", mul)'

      

    execCode = compile(srcCode, 'mulstring', 'exec')

      

    exec(execCode)

    Выход:

    mul = 200
    

    x = 50

      

    a = compile('x', 'test', 'single')

    exec(a)

    Выход:

    50
    

    Приложения:

    1. Если код Python находится в строковой форме или является объектом AST, и вы хотите изменить его на объект кода, то вы можете использовать метод compile ().
    2. Объект кода, возвращаемый методом compile (), позже может быть вызван с использованием таких методов, как: exec () и eval (), которые будут выполнять динамически генерируемый код Python.

    Рекомендуемые посты:

    Python compile () Функция

    0.00 (0%) 0 votes

    Использование регулярных выражений в Python.

    Регулярные выражения — это шаблоны соответствующего текста, описанные в формальном синтаксисе. Шаблоны интерпретируются как набор инструкций, которые выполняются со строкой в ​​качестве входных данных для соответствующего подмножества модифицированной версии оригинала. Регулярные выражения могут быть в себя буквальное сопоставление текста, повторение, ветвление и другие сложные правила. Регулярные выражения обычно используются в приложениях, которые требуют тонкую обработку текста.

    Модуль re использует операции сопоставления шаблонов регулярных выражений, аналогичные тем, которые встречаются на языке Perl .

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

    Шаблоны регулярных выражений и строки для поиска могут быть как строки Unicode, так и 8-битными строками. Однако Unicode и 8-битные строки не могут быть смешаны. То есть вы не можете сопоставить строку Unicode с байтовым шаблоном регулярного выражения или наоборот. Аналогично, при замене на регулярное выражение строки должно быть того же типа, что и регулярное выражение и строка поиска.


    Символьные классы и сокращенные обозначения классов.

    Квадратные скобки `[]` используются для указаний класса символов, который собой набор символов, которым нужно соответствовать.Специальные программы включают в класс символов для обозначения групп букв, слова, цифр и т. д.

    Компиляция регулярных выражений в Python.

    Регулярные выражения компилируются в объекты шаблонов, которые имеют методы для различных операций, таких как поиск соответствий шаблонов или выполнение подстановок строк.

    Обратный слеш в регулярных выражениях Python.

    сопоставить обратную косую черту литерала, нужно написать ‘\\\\’ как строку RegExp в Python, потому что чтобы регулярное выражение должно быть `\\` и каждая обратная косая черта должна быть выражена как \\ `внутри обычного строкового литерала Python.

    Функции уровня модуля re в Python.

    В функциях уровня модуля не нужно создать / компилировать объект и вызвать его методы. Модуль `re` определяет функции верхнего уровня, такие как` match () `,` search () `,` findall () `,` sub () `и так далее. Шаблон регулярного выражения добавляется в первого качестве аргумента функции.

    Флаги объекта регулярного выражения.

    Флаги объекта `re.compile ()` позволяют изменить некоторые аспекты работы регулярных выражений. Флаги доступны в модуле `re` под двумя именами: длинное имя, например,` re.IGNORECASE` и короткая однобуквенная форма, например `re.I`. Несколько флагов функции компиляции `re.compile ()` могут быть задают

    Метасимволы нулевой ширины в RegExp Python.

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

    Обратные ссылки регулярного выражения.

    Обратные ссылки в шаблоне указывают, что содержимое более ранней группы также должно быть найдено в текущем месте строки. Например обозначение `\ 1` в шаблоне регулярного числа будет содержимым группы с номером` 1`.

    Именованные группы регулярных выражений Python.

    Синтаксис имени группы является одним из расширений Python: `(? P …)`. Переменная `name` это название группы. Именованные группы ведут себя точно так же, как группы захвата и связывают имя с группой.

    Группы без захвата в регулярных выражениях.

    Иногда требуется использовать группу для обозначения части регулярного выражения при этом содержании группы в последующем получать не нужно. Для этого необходимо [использовать группу без захвата: `(?: …)` где `…` заменяется регулярным выражением.

    Опережающая и ретроспективная проверка позиции в RegExp.

    Опережающая проверка анализирует текст, расположенный справа, и проверяет возможность совпадения подвыражения. Если совпадение возможно, считается успешной.Также существует ретроспективная проверка, при которой текст анализируется в обратном направлении, к левому краю.

    Деление строки по регулярному выражению.

    Функция re.split () делит строку по соответствующему регулярному выражению. Если в регулярном выражении используются захватывающие скобки, то их содержимое также будет возвращено как часть результирующего списка. Можно ограничить количество выполненных разбиений, передав значение maxsplit.

    Функция `re.match ()` проверяет совпадение регулярного выражения только в начале строки, в то время как функция `re.search () `будет сканировать вперед на предмет первого совпадения с шаблоном. Важно держать это различие в виду.

    Жадный квантификатор против не жадного.

    При повторении регулярного выражения при помощи ʻa * `, результирующее действие состоит в том, чтобы захватить как можно больше строки для анализа. Такой шаблон как `’<. *>‘ ‘Для сопоставления одного HTML тега не работает из-за жадной природы выражения`. * `.

    .

    Про Python — Справочник — повторные (регулярные выражения)

    Инструменты для работы с регулярными выражениями.

    Регулярное выражение (re, regexp) позволяет описать некоторое количество строк при помощи шаблона для дальнейшего определения того, входит какая-либо строка в этом множестве. Модуль предоставляет инструменты для работы с регулярными выражениями, подобными тем, которые могут быть на языке Perl.

    Как шаблоны так и строки, по которым создаются поиск, являются являться и строками Юникод (str) и 8-битными строками ( байт, ).

    Смешивать строки и байты не следует: нельзя сличить Юникод-строку с байтовым шаблоном и наоборот; при замене и строке, и шаблон, и заменитель должны быть одного типа.

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

    Дабы избежать необходимости экранирования, в качестве шаблонов регулярных выражений можно использовать сырые строки Питона (строки с префиксом r ). Например: r '\ n' — это строка из двух символов ( \ и n ), а '\ n' — это строка из одного символа, обозначающая переход на новую строку. Шаблоны регулярных выражений в Питоне часто используют сырые строки.

    Многие инструменты, предлагаемые модулем, доступны как в виде функций, так и в виде методов объектов скомпилированных регулярных выражений.Функции нет необходимости использовать короткий путь (при их использовании необходимо компилировать объект регулярного выражения).

    Попрактиковаться и отладить модуль регулярных выражения можно на сайте https://regex101.com
    Существует сторонний регулярное выражение с совместимым программным интерфейсом, предлагающий расширенную функциональность и более совершенную поддержку Юникода.

    Синонимы поиска: re (регулярные выражения), regexp, регулярка, регулярки

    ре.компилировать

    Компилирует объект регулярного выражения.для последующего использования…

    re.findall

    Ищет в строке непересекающиеся вхождения шаблона.

    re.fullmatch

    Определяет соответствие строки указанному шаблону.

    повторное сопоставление

    Ищет соответствие шаблону в начале строки.

    исследование

    Ищет соответствие шаблону в любом месте строки.

    Синтаксис регулярных выражений

    Здесь базовая информация о синтаксисе регулярных выражений.

    .

    Регулярное выражение в Python с примерами | Комплект 1

    Модуль Regular Expressions (RE) указывает набор строк (шаблон), который ему соответствует.
    Чтобы понять аналогию RE, MetaCharacters полезны, важны и будут роман в функциях модуля re.
    Всего имеется 14 метасимволов, и они будут обсуждаться по мере их выполнения в следующих функциях:

  • Функция compile ()
    Регулярные выражения компилируются в объекты, которые имеют методы для различных операций, таких как поиск совпаденийов или выполнение подстановок строк .

    импорт re

    p = re. компилировать ( '[ae]' )

    печать (p.findall ( "Да, сказал г-н Гибенсон Старк" ))

    Выход:

    ['e', 'a', 'd', 'b', 'e', ​​'a']
     

    Понимание вывода:
    Первое вхождение — это «е» в «Да», а не «А», так как оно чувствительно к регистру.
    Следующее вхождение — «a» в «сказанном», затем «d» в «сказанном», затем «b» и «e» в «Гибенсоне», последнее «а» соответствует «Старку».


    Метасимвол blackslash ‘/’ играет очень важную роль, поскольку сигнализирует о различных последовательностях. Если черный язык должен объявить без его специального значения в качестве метасимвола, використовуйте «//»

    \ d Соответствует любой десятичной цифре, это эквивалентно
         в заданный класс [0-9].\ D Соответствует любому нецифровому символу.
    \ s Соответствует любому пробельному символу.
    \ S Соответствует любому непробельному символу
    \ w Соответствует любому буквенно-цифровому символу, это
         эквивалент класса [a-zA-Z0-9_].
    \ W Соответствует любому не буквенно-цифровому символу. 

    Заданный класс [/ s,.] Будет соответствовать любому символу пробела, ‘,’ или, ‘.’ ,

    импорт re

    p = re. скомпилировать ( '\ d' )

    распечатать (p.findall ( "Я пошел к нему в 11 утра 4 июля 1886 г." ))

    p = re. компилировать ( '\ d +' )

    распечатать (p.findall ( "Я пошел к нему в 11 утра 4 июля 1886 г." ))

    Выход:

    ['1', '1', '4', '1', '8', '8', '6']
    ['11', '4', '1886']
     

    импорт re

    p = re. компилировать ( '\ w' )

    print (p.findall ( "Он сказал * на некотором_языке." ))

    р = рэ. compile ( '\ w +' )

    print (p.findall ( "Я пошел к нему в 11 утра, он сказал *** на some_language." ) )

    p = re. скомпилировать ( '\ W' )

    напечатать (p.findall ( "он сказал *** на некотором_языке." ))

    Выход:

    ['H', 'e', ​​'s', 'a', 'i', 'd', 'i', 'n', 's', 'o', 'm', 'e', ​​' _ ',' l ',' a ',' n ',' g ']
    ['Я', 'пошел', 'к', 'ему', 'в', '11', 'А', 'М', 'он', 'сказал', 'в', 'some_language']
    ['', '', '*', '*', '*', '', '', '.']
     

    импорт re

    p = re. компилировать ( 'ab *' )

    печать (p.findall ( "ababbaabbb" ))

    Выход:

    ['ab', 'abb', 'a', 'abbb']
     

    Понимание вывода:
    Наше RE — это ab *, который «a» сопровождается любым №. из ‘б’, начиная с 0.
    Вывод ‘ab’, из-за одиночного ‘a’, сопровождаемого одиночным ‘b’.
    Вывод ‘abb’, действителен из-за одинарного ‘a’, сопровождающий 2 ‘b’.
    Вывод ‘a’, допустим, потому что одиночный ‘a’ сопровождается 0 ‘b’.
    Вывод ‘abbb’, действителен из-за одного ‘a’, сопровождаемого 3 ‘b’.

  • Функция split ()
    Разбить строку по вхождению символов или шаблон, при нахождении этого шаблона оставшиеся символы из строки возвращаются как часть полученного списка.
    Синтаксис:
     re.split (pattern, string, maxsplit = 0, flags = 0) 

    Первый параметр, pattern обозначает регулярное выражение, строка — это заданная строка, в которой будет производиться поиск шаблона и в которой происходит расщепление, maxsplit, если он не предоставлен, считается равным нулю ‘0’, и если предоставляется ненулевое значение, то Максимум, что происходит много расколов.Если maxsplit = 1, то строка разделена только один раз, что приведет к списку 2. Флаги очень полезны и могут помочь сократить код, они не являются обязательными, например: flags = re.IGNORECASE, В этом разделе, случай будет проигнорирован .

    из повторно импорт разделение

    печать (разделение ( '\ W +' , 'Слова, слова, слова' ))

    печать (разделение ( '\ W +' , «Слова слов» ))

    печать (разделение ( '\ W +' , '12 января 2016 г., в 11:02' ))

    печать (разделить ( '\ d +' , '12 января 2016 г., 11:02' ))

    Выход:

    ['Слова', 'слова', 'слова']
    ['Word', 's', 'слова', 'слова']
    ['On', '12th', 'Jan', '2016', 'at', '11', '02', 'AM']
    ['On', 'th Jan', ', at', ':', 'AM']
     

    импорт re

    печать (re.split ( '\ d +' , '12 января 2016 г., в 11:02' , 1 ))

    печать (re. split ( '[af] +' , 'Эй, мальчик, о мальчик, иди сюда' , flags = re.IGNORECASE))

    print (re.split ( '[af] +' , 'Эй, мальчик, о мальчик, иди сюда' ))

    Выход:

    ['On', января 2016 года, 11:02]
    ['', 'y,', 'oy oh', 'oy,', 'om', 'h', 'r', '']
    ['A', 'y, Boy oh', 'oy,', 'om', 'h', 'r', '']
     
  • Функция sub ()
    Синтаксис:
     re.sub (pattern, repl, string, count = 0, flags = 0) 

    ‘Sub’ в функциях обозначает SubString, в заданной работе выполняется поиск определенного шаблона регулярного выражения (3-й параметр), и после нахождения шаблона подстроки заменяется на repl (2-й параметр), счетчик проверяет и поддерживает количество раз это происходит.

    импорт re

    печать (re.sub ( 'ub' , '~ *' , 'Тема имеет Убер уже забронировал , флаги = re.IGNORECASE))

    print (re.sub ( 'ub' , '~ *' , 'Субъект уже забронировал Uber' ))

    распечатать (re.sub ( 'ub' , '~ *' , 'Субъект уже забронировал Uber' , count = 1 , флаги = ре.IGNORECASE))

    print (re.sub (r '\ sAND \ s' , 'и' , 'Baked Beans And Spam' , flags = re.IGNORECASE))

    Выход

    С ~ * объект уже забронирован
    S ~ * ject уже забронировал номер через Uber
    S ~ * ject уже забронировал номер через Uber
    Запеченная фасоль и спам
     
  • Функция subn ()
    Синтаксис:
     re.subn (шаблон, repl, строка, count = 0, flags = 0) 

    subn () во всех отношениях похожа на sub (), за другой метод вывода. Он возвращает кортеж с общей заменой строкой, а не просто строкой.

    импорт re

    печать (re.subn ( 'ub' , '~ *' , 'Субъект уже забронирован в Uber' ))

    т = ре.subn ( 'ub' , '~ *' , 'Субъект уже зарезервировал Uber' , flags = re.IGNORECASE)

    print (t )

    печать ( лин (t))

    печать (t [ 0 ])

    Выход

    ('S ~ * ject уже забронировал Uber', 1)
    ('S ~ * объект уже ~ * забронирован', 2)
    Длина кортежа: 2
    С ~ * объект уже забронирован
    
     
  • Функция escape ()
    Синтаксис:
     re.escape (строка) 

    Возвращает строку со всеми алфавитно-цифровыми обратными операциями, это полезно, если вы хотите сопоставить произвольную литеральную строку, в которой могут быть метасимволы регулярного выражения.

    импорт re

    печать (re.escape ( "This is Awseome even 1 AM" ))

    print ( ре.Вау

    Эта статья предоставлена ​​ Пиюшем Доорваром . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать с помощью Contract.geeksforgeeks.org или по почте статьи [email protected] Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

    Пожалуйста, пишите комментарии, если вы обнаружите, что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

    .

    Python compile () Функция | Портал информатики для гиков

    Compile (): рассмотрим ситуацию, когда у нас есть фрагмент кода Python в строке, и мы хотим скомпилировать его, чтобы потом можно было запустить его при необходимости. Метод компиляции этой задачи. Он принимает качестве исходный код в входных данных и возвращает объект кода, который готов к выполнению.

    Синтаксис:

    компиляция (источник, имя файла, режим, флаги = 0, dont_inherit = False, optimize = -1)
     

    Параметры:

    Источник - это может быть обычная строка, байтовая строка или объект AST.

    Имя файла - Это файл, из которого был прочитан код.Если оно не было прочитано из файла, вы можете дать имя самостоятельно.

    Mode - Mode может быть exec, eval или single.
    а. eval - Если волшебство - это одно выражение.
    г. exec - может принимать блок кода, который имеет операторы Python, класс, функции и так далее.
    г. single - используется, если состоит из одного интерактивного оператора

    Flags (необязательно) и dont_inherit (необязательно) - значение по умолчанию = 0. Он заботится о том, какие будущие утверждения повлияют на компиляцию источника.
    Оптимизировать (необязательно) - Сообщает уровень оптимизации компилятора. Значение по умолчанию -1.

    srcCode = 'x = 10 \ ny = 20 \ nmul = x * y \ nprint ("mul =", mul)'

    execCode = скомпилировать (srcCode, 'mulstring' , 'exec' )

    exec (execCode)

    Выход:

    mul = 200
     

    x = 50

    a = компилировать ( 'x' , 'тест' , 'single' )

    exec (a)

    Выход:

    50
     

    Приложения:

    1. Если код Python находится в строковой форме или является объектом AST, и вы хотите изменить его на объект кода, то вы можете использовать метод compile ().
    2. Объект кода, возвращаемый метод compile (), позже может быть вызван использованием таких методов, как exec () и eval (), которые будут выполнять динамически генерируемый код Python.

    Рекомендуемые посты:

    Python compile (Функция)

    0.00 (0%) 0 голосов

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    2021 © Все права защищены. Карта сайта