455

在 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. 我在文档中找不到类似 Perl 的i后缀(例如m/test/i)的东西。

4

9 回答 9

728

传递re.IGNORECASE给、或的flags参数:searchmatchsub

re.search('test', 'TeSt', re.IGNORECASE)
re.match('test', 'TeSt', re.IGNORECASE)
re.sub('test', 'xxxx', 'Testing', flags=re.IGNORECASE)
于 2009-02-01T14:01:10.040 回答
128

您还可以使用不带 IGNORECASE 标志的搜索/匹配来执行不区分大小写的搜索(在 Python 2.7.3 中测试):

re.search(r'(?i)test', 'TeSt').group()    ## returns 'TeSt'
re.match(r'(?i)test', 'TeSt').group()     ## returns 'TeSt'
于 2012-05-04T07:05:38.797 回答
75

不区分大小写的标记,(?i)可以直接合并到正则表达式模式中:

>>> import re
>>> s = 'This is one Test, another TEST, and another test.'
>>> re.findall('(?i)test', s)
['Test', 'TEST', 'test']
于 2017-02-23T03:43:41.960 回答
19

您还可以在模式编译期间定义不区分大小写:

pattern = re.compile('FIle:/+(.*)', re.IGNORECASE)
于 2014-05-12T15:26:30.893 回答
9

在进口

import re

在运行时处理:

RE_TEST = r'test'
if re.match(RE_TEST, 'TeSt', re.IGNORECASE):

需要指出的是,不使用re.compile是浪费。每次调用上述 match 方法时,都会编译正则表达式。这也是其他编程语言的错误做法。下面是更好的做法。

在应用程序初始化中:

self.RE_TEST = re.compile('test', re.IGNORECASE)

在运行时处理:

if self.RE_TEST.match('TeSt'):
于 2017-06-01T03:34:40.797 回答
9

要执行不区分大小写的操作,请提供 re.IGNORECASE

>>> import re
>>> test = 'UPPER TEXT, lower text, Mixed Text'
>>> re.findall('text', test, flags=re.IGNORECASE)
['TEXT', 'text', 'Text']

如果我们想替换匹配大小写的文本......

>>> def matchcase(word):
        def replace(m):
            text = m.group()
            if text.isupper():
                return word.upper()
            elif text.islower():
                return word.lower()
            elif text[0].isupper():
                return word.capitalize()
            else:
                return word
        return replace

>>> re.sub('text', matchcase('word'), test, flags=re.IGNORECASE)
'UPPER WORD, lower word, Mixed Word'
于 2019-06-21T04:15:43.707 回答
7

对于不区分大小写的正则表达式(Regex):在代码中添加有两种方法:

  1. flags=re.IGNORECASE

    Regx3GList = re.search("(WCDMA:)((\d*)(,?))*", txt, **re.IGNORECASE**)
    
  2. 不区分大小写的标记(?i)

    Regx3GList = re.search("**(?i)**(WCDMA:)((\d*)(,?))*", txt)
    
于 2020-05-04T20:40:42.980 回答
5
#'re.IGNORECASE' for case insensitive results short form re.I
#'re.match' returns the first match located from the start of the string. 
#'re.search' returns location of the where the match is found 
#'re.compile' creates a regex object that can be used for multiple matches

 >>> s = r'TeSt'   
 >>> print (re.match(s, r'test123', re.I))
 <_sre.SRE_Match object; span=(0, 4), match='test'>
 # OR
 >>> pattern = re.compile(s, re.I)
 >>> print(pattern.match(r'test123'))
 <_sre.SRE_Match object; span=(0, 4), match='test'>
于 2016-10-12T22:48:14.963 回答
3

如果您想替换但仍保留以前 str 的样式。有可能的。

例如:突出显示字符串“test asdasd TEST asd tEst asdasd”。

sentence = "test asdasd TEST asd tEst asdasd"
result = re.sub(
  '(test)', 
  r'<b>\1</b>',  # \1 here indicates first matching group.
  sentence, 
  flags=re.IGNORECASE)

测试asdasd测试asd测试asdasd

于 2019-11-04T05:19:44.640 回答