Нечувствительность к регистру в строках Python - PullRequest
4 голосов
/ 25 апреля 2009

Я знаю, что вы можете использовать библиотеку ctypes для сравнения строк без учета регистра, однако я также хотел бы выполнить замену без учета регистра. В настоящее время я знаю, что делать это можно только с помощью Regex, и через это кажется немного плохим.

Существует ли версия replace () без учета регистра?

Ответы [ 3 ]

10 голосов
/ 25 апреля 2009

Вы можете поставить флаг re.IGNORECASE для функций в модуле re, как описано в документах .

matcher = re.compile(myExpression, re.IGNORECASE)
5 голосов
/ 25 апреля 2009

Использование re - лучшее решение, даже если вы думаете, что это сложно.

Чтобы заменить все вхождения 'abc', 'ABC', 'Abc' и т. Д., На 'Python', произнесите:

re.sub(r'(?i)abc', 'Python', a)

Пример сеанса:

>>> a = 'abc  asd   Abc  asd  ABCDE    XXAbCXX'
>>> import re
>>> re.sub(r'(?i)abc', 'Python', a)
'Python  asd   Python  asd  PythonDE    XXPythonXX'
>>> 

Обратите внимание, как встраивание (?i) в начале регулярного выражения делает его чувствительным к регистру. Также обратите внимание на строковый литерал r'...' для регулярного выражения (который в данном конкретном случае является избыточным, но помогает, как только ваше регулярное выражение содержит обратную косую черту (\).

1 голос
/ 25 апреля 2009

Самый простой способ - перевести все это в нижний регистр, а затем выполнить замену. Но, очевидно, это проблема, если вы хотите сохранить первоначальный случай.

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

См. этот сайт для примера.

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