当前位置:  开发笔记 > 编程语言 > 正文

不重新编译的不区分大小写的正则表达式?

如何解决《不重新编译的不区分大小写的正则表达式?》经验,为你挑选了4个好方法。

在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).



1> Michael Hare..:

传递re.IGNORECASEflags的PARAM search,matchsub:

re.search('test', 'TeSt', re.IGNORECASE)
re.match('test', 'TeSt', re.IGNORECASE)
re.sub('test', 'xxxx', 'Testing', flags=re.IGNORECASE)



2> aem999..:

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

re.search(r'(?i)test', 'TeSt').group()    ## returns 'TeSt'
re.match(r'(?i)test', 'TeSt').group()     ## returns 'TeSt'


我们去了 - 我查看了1.5的文档并发现它记录了此页面的大约60%:https://docs.python.org/release/1.5/lib/node65.html#SECTION005210000000000000000我还检查了1.4文档,没有提到这个功能.所以我猜它是在1.5中添加的,当时``regex`模块被弃用而支持`re`模块.
这是一个很好的解决方案,因为它不需要标志.在我的情况下,我在Redis中存储搜索字符串,这非常有用.
@Private:从概念上讲,它确实在*whole*regex上设置了re.I标志 - 而不仅仅是它前面的捕获组.请注意`re.match(r'''A((?i)B)C''',"ab c").group(0)`会对所有内容(A和C)造成不区分大小写的匹配,而不是就在B!如果您只想在特定捕获组上匹配大小写,那么这不是您正在寻找的机器人.
文档没有提到在任何特定版本中添加的功能(相反,比如说,(?(条件)是|否)`它说的是在2.4中添加的),所以我希望它一直可用,因为`re`模块的第一个版本,我认为是在1.5中添加的.基本上从一开始就涉及Python的所有意图和目的.它记录了本页第一部分的一半:https://docs.python.org/2/library/re.html#regular-expression-syntax

3> Raymond Hett..:

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

>>> import re
>>> s = 'This is one Test, another TEST, and another test.'
>>> re.findall('(?i)test', s)
['Test', 'TEST', 'test']


更好的选择,使得正则表达式可以跨平台和意图移植,声明清晰

4> panofish..:

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

pattern = re.compile('FIle:/+(.*)', re.IGNORECASE)


有助于快速滚动的.
在问题OP中使用它并询问是否有另一种方法可以做到这一点.
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有