python - 如何在python re中通过字符串修饰符否定默认的IGNORECASE

标签 python regex

我有一个脚本,可以在文本文件中搜索与作为命令行参数传入的正则表达式匹配的行。

默认情况下,脚本执行不区分大小写的搜索(我希望这样)。

如何在正则表达式参数中传递 -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

最佳答案

我想我已经明白了。应该更仔细地阅读文档。

需要像这样格式化正则表达式:

res5 = '(?-i:TeSt)'

关于python - 如何在python re中通过字符串修饰符否定默认的IGNORECASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56613384/

相关文章:

python - Python 的可点击图像

php - 替换双引号内的内容,包括双引号

java - 用于获取整数和带空格的连字符的正则表达式(特殊模式识别)

regex - 日志文件中的百分比差异

java - 使用正则表达式进行 tar 扩展名匹配

python - 在 try/except 中捕获特定的错误消息

Python 日志记录时间戳转换为 mysql 时间戳

python - 如何将 self 和 2 个参数传递给线程

python - 是否有一种矢量化的方法来检查 DataFrame 中的值(例如,如果一切都是长度为 0 的字符串)

regex - 如何找到字符串上正则表达式匹配的百分比?