Как отменить IGNORECASE по умолчанию с помощью модификатора строки в Python Re - PullRequest
1 голос
/ 15 июня 2019

У меня есть сценарий, который ищет в текстовом файле строки, соответствующие регулярному выражению, переданному в качестве аргумента командной строки.

По умолчанию сценарии выполняют поиск без учета регистра (я так хочу).

Как передать флаг -i в аргументе регулярного выражения, чтобы выполнить поиск с учетом регистра.Я пробовал ниже, но не мог понять это.

Он всегда выполняет поиск без учета регистра.

Я пробовал это как на Python 2.7, так и на 3.6.

>>> import re
>>> res1 = 'TEST'
>>> res2 = 'test'
>>> res3 = '(?-i:)TEST'
>>> res4 = '(?-i:)TeSt'
>>> res5 = '((?-i:)TeSt)'
>>>
>>> string = 'TeSt'
>>>
>>> def str_match(re_str = ''):
...     print(re.search(r'(?i)' + re_str, string))
...
>>>
>>> str_match(res1)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match(res2)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match(res3)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match(res4)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match(res5)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>>
>>>
>>>
>>> def str_match_2(re_str = ''):
...     print(re.search(re_str, string, re.I))
...
>>>
>>> str_match_2(res1)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match_2(res2)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match_2(res3)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match_2(res4)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match_2(res5)
<_sre.SRE_Match object; span=(0, 4), match='TeSt'>
>>>
>>> str_match('none')
None
>>>
>>> str_match_2('none')
None

1 Ответ

0 голосов
/ 15 июня 2019

Думаю, я понял это.Нужно было внимательно прочитать документацию.

Необходимо отформатировать регулярное выражение следующим образом:

res5 = '(?-i:TeSt)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...