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

Питон решить

Если вы похожи на меня, вы будете регулярно сидеть перед вашим кодом и удивляться: как избежать данного персонажа? Задача: некоторые символы имеют особое значение в строках Python и регулярные выражения. Скажем, вы хотите найти строку «(ы)», но двигатель Regex требует трех символов в качестве соответствующей группы. … Python Re Escape Подробнее »

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

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

Вызов : Некоторые символы имеют особое значение в строках Python и регулярные выражения. Скажи, что хотите искать строку "(ы)" Но двигатель REGEX принимает три персонажа (ы) как Соответствующая группа Отказ Вы можете вручную избежать специальных символов и кронштейнов, используя \ (s \) , но это утомительно и ошибка.

Вопрос:|: Как автоматически избежать всех символов для регулятора Regex?

Если у вас есть эта проблема, вам повезло. Эта статья является Ultimate Guide Чтобы избежать специальных персонажей в питоне. Просто нажмите на тему, которая вас интересует, и научитесь избежать специального персонажа, с которым вы в настоящее время боретесь!

Если вы нетерпеливый парень, вам тоже повезло. Просто попробуйте добавить обратную косание на ваш специальный персонаж, который вы хотите сбежать: \ x избежать специального персонажа х Отказ

Вот несколько примеров:

>>> import re
>>> re.findall('\( \{ \" \. \* \+', r'( { " . * +')
['( { " . * +']

Тем не менее, вы не можете избежать всех этих вручную. Вот почему метод Re.escape существует!

Метод Python Re.escape

Если вы знаете, что ваша строка имеет много специальных символов, вы также можете использовать удобный метод Re.escape (Pattern) от Python’s Re модуль.

Спецификация : Re.escape (Pattern)

Определение : Убегает все специальные мета-персонажи Regex в данном шаблон Отказ

Пример : Вы можете избежать всех специальных символов в одном Go:

>>> re.escape('https://www.finxter.com/')
'https://www\\.finxter\\.com/'

Символ точки имеет особое значение в строке 'https://www.finxter.com/' Отказ Других специальных символов нет. Следовательно, все специальные символы заменены.

Обратите внимание, что «только персонажи, которые могут иметь особое значение в регулярном выражении, сбежались. В результате '! , '"' ' , «%» , «» , ',' , '/' , ':' , ';' , '<' , '=' , '>' , '@' и "` " больше не сбежали »( Источник ).

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

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

Python Regex Escape

Если вы используете специальные символы в строках, они несут особую смысл. Иногда вам это не нужно. Общая идея состоит в том, чтобы избежать особого персонажа х С дополнительной обратной ячейкой \ x избавиться от особого значения.

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

Python Regex Escape скобки ()

Как избежать скобок ( и ) В Python Регулярные выражения?

С скобками имеют особое значение в регулярных выражениях Python: они открываются и закрывают соответствующие группы.

Вы можете избавиться от особого значения скобок с помощью префикса Backslash: \ ( и \) Отказ Таким образом, вы можете сопоставить символы скобок в данной строке. Вот пример:

>>> import re
>>> re.findall(r'\(.*\)', 'Python is (really) great')
['(really)']

Результат показывает строку, содержащую «специальные» символы '(' и ')' Отказ

Python Regex Escape квадратные скобки []

Как избежать квадратных кронштейнов [ и ] В Python Регулярные выражения?

Квадратные скобки имеют особое значение в регулярных выражениях Python: они открывают и закрывают наборы символов.

Вы можете избавиться от особого значения кронштейнов, используя префикс Backslash: \ [ и \] Отказ Таким образом, вы можете сопоставить символы кронштейнов в данной строке. Вот пример:

>>> import re
>>> re.findall(r'\[.*\]', 'Is Python [really] easy?')
['[really]']

Результат показывает строку, содержащую «специальные» символы «[» и ']' Отказ

Python Regex Escape Кудрявая скобка (кронштейны)

Как избежать фигурных скобок { и } В Python Регулярные выражения?

Вьющиеся брекеты не имеют никакого особого значения в строках Python или регулярных выражений. Поэтому вам не нужно избежать их ведущей обратной косой чертом \ Отказ Тем не менее, вы можете сделать это, если вы хотите, как вы видите в следующем примере:

>>> import re
>>> re.findall(r'\{.*\}', 'if (2==2) { y = 3; }')
['{ y = 3; }']
>>> re.findall(r'{.*}', 'if (2==2) { y = 3; }')
['{ y = 3; }']
>>> re.findall('{.*}', 'if (2==2) { y = 3; }')
['{ y = 3; }']

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

Python Regex Escape Slash (Backslash и Forward-Slash)

Как избежать косой персонажей – обратная черта \ и вперед-косулью / -Ном питона регулярных выражений?

Обратная черта имеет особое значение в регулярных выражениях Python: он уходит в специальные символы и, таким образом, удаляет особое значение. (Как мета.)

>>> import re
>>> re.findall(r'\\...', r'C:\home\usr\dir\hello\world')
['\\hom', '\\usr', '\\dir', '\\hel', '\\wor']

Вы можете видеть, что полученные матчи сбежали самих спинки. Это связано с тем, что символ обратной косания имеет особое значение в нормальных строках. Таким образом, интерпретатор Python ускользает от него автоматически при печати его на оболочке. Обратите внимание, что вам не нужно было избежать символов обратной спинки при записи сырой строки R'C: \ home \ usr \ dir \ hello \ World ' Поскольку необработанная строка уже удаляет все особое значение с обратной косажирования персонажей. Но если вы не хотите использовать необработанную строку, но нормальную строку, вам нужно избежать персонажа обратной косоты самостоятельно:

>>> re.findall(r'\\...', 'C:\\home\\usr\\dir\\hello\\world')
['\\hom', '\\usr', '\\dir', '\\hel', '\\wor']

В отличие от обратной косой черты, передняя слеш не нужно избежать. Почему? Поскольку у него нет особого значения в строках Python и регулярных выражений. Вы можете увидеть это в следующем примере:

>>> import re
>>> re.findall('/...', '/home/usr/dir/hello/world')
['/hom', '/usr', '/dir', '/hel', '/wor']

Результат показывает, что даже в неременной строке вы можете использовать прядильник без ведущего escape символ.

Python Regex Escape String Один цитаты

Как избежать одиночных кавычек ' В Python Регулярные выражения?

Одиночные цитаты имеют особое значение в регулярных выражениях Python: они открываются и закрывают строки.

Вы можете избавиться от особого значения одиночных кавычек, используя префикс обратной косой черты: \ ' Отказ Таким образом, вы можете сопоставить символы цитаты строки в данной строке. Вот пример:

>>> import re
>>> re.findall('\'.*\'', "hello 'world'")
["'world'"]

Результат показана строка, которая содержит «специальные» одночисленные символы цитаты. Результатом также показывает альтернативу, которая удаляет особое значение одиночных кавычек: заключать их в двойных кадинатах: "Здравствуйте" мир "" Отказ

Python Regex Escape String Двойные цитаты

Как избежать двойных кавычек « в Python Регулярные выражения?

Двойные цитаты имеют особое значение в регулярных выражениях Python: они открываются и закрывают строки.

Вы можете избавиться от особого значения одиночных кавычек, используя префикс обратной косой черты: \ " . Таким образом, вы можете сопоставить символы цитаты строки в данной строке. Вот пример:

>>> import re
>>> re.findall('\".*\"', 'hello "world"')
['"world"']

Результат показана строка, которая содержит «специальные» одночисленные символы цитаты. Результатом также показывает альтернативу, которая удаляет особое значение одиночных кавычек: заключать их в двойных кадинатах: «Здравствуйте» мир "' Отказ

Python Regex Escape Dot (период)

Как избежать Regex Dot (или Период ) Мета-символ Отказ В Python Регулярные выражения?

Персонаж DOT имеет особое значение в регулярных выражениях Python: он соответствует произвольным характеру (кроме новой строки).

Вы можете избавиться от особого значения DOT-символа, используя префикс обратной ячейки: \. Отказ Таким образом, вы можете сопоставить точечный символ в данной строке. Вот пример:

>>> import re
>>> re.findall('..\.', 'my. name. is. python.')
['my.', 'me.', 'is.', 'on.']

Результат показывает четыре струны, которые содержат «специальные» символы '.' Отказ

Python Regex Escape Plus

Как избежать символа плюс + В Python Регулярные выражения?

Символ плюс имеет особое значение в регулярных выражениях Python: это один или более квантификатор предыдущего регулятора.

Вы можете избавиться от особого значения символа Regex Plus, используя префикс Backslash: \ + Отказ Таким образом, вы можете сопоставить символы плюс символов в данной строке. Вот пример:

>>> import re
>>> re.findall('\++', '+++python+++rocks')
['+++', '+++']

Результат показывает оба использования: символ плюс с ведущим символом и без него. Если он сбежен \ + это соответствует сыру плюс персонажа. Если это не сбежит + , это количественно определяет рисунок Regex прямо перед ним (в нашем случае а также сам символ плюс).

Python Regex Escape Asterisk

Как избежать символа звездочки * В Python Регулярные выражения?

Символ Asterisk имеет особое значение в регулярных выражениях Python: это Zero-или более квант предыдущего Regex.

Вы можете избавиться от особого значения символа Asterisk Regex, используя префикс Backslash: \ * Отказ Таким образом, вы можете сопоставить символы символов Asterisk в данной строке. Вот пример:

>>> import re
>>> re.findall('\**', '***python***rocks')
['***', '***']

Результат показывает оба использования: символ звездочки с ведущим символом Escape. Если он сбежен \ * он соответствует необработанному персонажу звездочка. Если это не сбежит * , он определяет рисунок Regex прямо перед ним (в нашем случае сама символ звездочка).

Python Regex Escape Вопросительный знак

Как избежать вопросительного знака символа ? В Python Регулярные выражения?

Символ вопросительного знака имеет особый смысл в регулярных выражениях Python: это Zero-On-One Quantifier предыдущего Regex.

Вы можете избавиться от особого значения символа вопросительного знака, используя префикс Backslash: \? Отказ Таким образом, вы можете сопоставить символы символов вопросительного знака в данной строке. Вот пример:

>>> import re
>>> re.findall('...\?', 'how are you?')
['you?']

Результат показывает, что символ вопросительного знака был сопоставлен в данной строке.

Python Regex Escape Usderscore

Как избежать символа подчеркивания _ В Python Регулярные выражения?

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

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

>>> import re
>>> re.findall('..._', 'i_use_underscore_not_whitespace')
['use_', 'ore_', 'not_']

Тем не менее, это тоже не вредит, чтобы избежать этого:

>>> re.findall('...\_', 'i_use_underscore_not_whitespace')
['use_', 'ore_', 'not_']

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

Python Regex Escape Pipe

Как избежать символа трубы |. (Вертикальная линия) в регулярных выражениях Python?

Символ трубы имеет особое значение в регулярных выражениях Python: Regex или оператор.

Вы можете избавиться от особого значения символа трубы с помощью префикса Backslash: \ |. Отказ Таким образом, вы можете сопоставить символы скобок в данной строке. Вот пример:

>>> import re
>>> re.findall('.\|.', 'a|b|c|d|e')
['a|b', 'c|d']

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

Если вы не избежите символа трубы, результат будет совсем другим:

>>> re.findall('.|.', 'a|b|c|d|e')
['a', '|', 'b', '|', 'c', '|', 'd', '|', 'e']

В этом случае Regex . | матчи «Произвольный характер или произвольный характер» -Quite бессмысленно!

Python Regex Escape Dollar

Как избежать символа доллара $ В Python Регулярные выражения?

Символ доллара имеет особое значение в регулярных выражениях Python: он совпадает с концом строки.

Вы можете избавиться от особого значения, используя префикс Backslash: \ $ Отказ Таким образом, вы можете сопоставить символ доллара в данной строке. Вот пример:

>>> import re
>>> re.findall('\$\d+', 'Your house is worth $1000000')
['$1000000']

Обратите внимание, что \ D + Regex соответствует произвольному количеству численных цифр от 0 до 9.

Python Regex побег больше, чем и меньше, чем

Как избежать больше, чем < и меньше чем > Символы в Python Регулярные выражения?

Больше и меньше, чем символы не имеют особого значения в регулярных выражениях Python. Поэтому вам не нужно их избежать.

Вот пример:

>>> import re
>>> re.findall('<.*>.*<.*>', '
hello world
') ['
hello world
']

Результат показывает строку, которая даже без сбегания символов HTML-тегов, Regex соответствует всей строке.

Python Regex Escape Seephen

Как избежать дефиса - В Python Регулярные выражения?

Снаружи А Характер SE T Их дефис не имеет особого значения, и вам не нужно его избежать. Вот пример:

>>> import re
>>> re.findall('..-', 'this is-me')
['is-']

Неизведанный персонаж дефиша в Regex соответствует дефису в строке.

Тем не менее, внутри А Набор символов , дефис подходит для символа диапазона (например [0-9] ), поэтому вам нужно избежать его, если вы хотите избавиться от своего особого значения и сопоставить саму символ дефиса. Вот пример:

>>> re.findall('[a-z\-]+', 'hello-world is one word')
['hello-world', 'is', 'one', 'word']

Обратите внимание, что в этом случае, если вы не избежите дефис в наборе символов, вы получаете тот же результат:

>>> re.findall('[a-z-]+', 'hello-world is one word')
['hello-world', 'is', 'one', 'word']

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

Python Regex Escape Newline

В недавнем Stackoverflow Статья, я прочитал следующий вопрос:

Я немного запутался о Python Raw String. Я знаю, что если мы используем сырую строку, то она будет лечить ‘\’ как нормальная обратная косание (например, R ‘\ N’ было бы ‘\’ а также ‘n’ ). Тем не менее, мне было интересно, что если я хочу сопоставить новую линейную персонажу в сырой строке. Я пытался R ‘\ N’ , но это не сработало. У кого-нибудь есть хорошая идея об этом?

Кодер, спрашивающий вопрос, понял, что переводчик Python не предполагает, что два персонажа \ и N Есть какое-либо особое значение в сырых струнах (в отличие от нормальных струн).

Однако эти два символа имеют особое значение для двигателя Regex! Поэтому, если вы используете их в качестве регулярного рисунка выражения, они действительно будут соответствовать символу Newline:

>>> import re
>>> text = '''This
is
a
multiline
string'''
>>> re.findall(r'[a-z]+\n', text)
['his\n', 'is\n', 'a\n', 'multiline\n']

Поэтому вам не нужно снова избежать символа Newline, чтобы сопоставить его в данной строке.

Python Regex Bad Escape

Существуют некоторые распространенные ошибки в отношении выхода в регулярные выражения Python.

Если вы попытаетесь избежать нормального персонажа, который не имеет особого значения, Python бросит «плохой ошибку побега»:

>>> re.findall('\m', 'hello {world}')
Traceback (most recent call last):
  File "", line 1, in 
    re.findall('\m', 'hello {world}')
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\re.py", line 223, in findall
    return _compile(pattern, flags).findall(string)
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\re.py", line 286, in _compile
    p = sre_compile.compile(pattern, flags)
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_compile.py", line 764, in compile
    p = sre_parse.parse(p, flags)
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 930, in parse
    p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 426, in _parse_sub
    not nested and not items))
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 507, in _parse
    code = _escape(source, this, state)
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 402, in _escape
    raise source.error("bad escape %s" % escape, len(escape))
re.error: bad escape \m at position 0

Как предполагает сообщение об ошибке, нет escape Sequence \ m Таким образом, вам нужно избавиться от этого, чтобы избежать ошибки.

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

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

В обоих случаях у вас есть большое преимущество перед другими кодерами: вы постоянный парень или гал!

Вы хотите увеличить свое преимущество над своими сверстниками? Затем присоединитесь к My Python Email Academy! Я научу тебя и выходам из Python Coding – все бесплатно!

Присоединяйтесь к Academy Academy Academy, станьте лучшим кодом, и скачайте бесплатный Python Cheat Steets!

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

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

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