В Python я могу скомпилировать регулярное выражение без учета регистра, используя re.compile
:
>>> s = 'TeSt'
>>> casesensitive = re.compile('test')
>>> ignorecase = re.compile('test', re.IGNORECASE)
>>>
>>> print casesensitive.match(s)
None
>>> print ignorecase.match(s)
<_sre.SRE_Match object at 0x02F0B608>
Есть ли способ сделать то же самое, но без использования re.compile
. Я не могу найти ничего подобного i
суффиксу Perl (например m/test/i
) в документации.
Ответы:
Пропустите
re.IGNORECASE
кflags
парам изsearch
,match
илиsub
:источник
re.match('test', 'TeSt', re.IGNORECASE)
может привести к тому,TypeError
что любой из атрибутов будетNone
. Используетсяtry & except
дляTypeError
поиска совпадений по first_string == second_string. Пример кодаdef equal_ignore_case(first_string, second_string): try: return re.match(first_string, second_string, re.IGNORECASE) is not None except (AttributeError, TypeError): return first_string == second_string
Demo CodeNone
первыми.flags
поскольку вre.sub
противном случае он передаетсяre.IGNORECASE
вcount
аргумент (например, stackoverflow.com/questions/42581/… )Вы также можете выполнять поиск без учета регистра, используя поиск / совпадение без флага IGNORECASE (протестировано в Python 2.7.3):
источник
(?(condition)yes|no)
что говорится в версии 2.4), поэтому я ожидаю, что она всегда была доступна с первой версииre
модуля, которая, я думаю, была добавлена в 1.5. В основном с начала времен для всех намерений и целей, когда дело доходит до Python. Документально описанregex
модуль устарел в пользуre
модуля.re.match(r'''A ((?i)B) C''', "a b c").group(0)
вызывает сопоставление без учета регистра для всего (A и C), а не только для B! Если вы хотите, чтобы совпадение без учета регистра в определенной группе захвата не выполнялось, это не тот дроид, которого вы ищете.Маркер
(?i)
без учета регистра может быть включен непосредственно в шаблон регулярных выражений:источник
'(?i)'
подход также имеет то преимущество, что вы можете создать список регулярных выражений, некоторые из которых не чувствительны к регистру, а некоторые нет. (И, конечно, вы можете отобразитьre.compile
этот список, если хотите.)flags=re.IGNORECASE
?Вы также можете определить регистр без учета регистра во время компиляции шаблона:
источник
В импорте
Во время выполнения обработки:
Следует отметить, что неиспользование
re.compile
является расточительным. Каждый раз, когда вызывается вышеуказанный метод match, регулярное выражение будет компилироваться. Это также ошибочная практика на других языках программирования. Ниже приведена лучшая практика.При инициализации приложения:
Во время выполнения обработки:
источник
re.compile()
....источник
Для выполнения операций без учета регистра поставьте re.IGNORECASE
и если мы хотим заменить текст, соответствующий регистру ...
источник
Если вы хотите заменить, но сохраняя стиль предыдущей ул. Это возможно.
Например: выделите строку «test asdasd TEST asd tEst asdasd».
Тест Asdasd TEST ASD TEST Asdasd
источник
Для регистрозависимого регулярного выражения (Regex): есть два способа добавления в ваш код:
flags=re.IGNORECASE
Нечувствительный к регистру маркер
(?i)
источник