python - 如何在python re中通过字符串修饰符否定默认的IGNORECASE
问题描述
我有一个脚本,它在文本文件中搜索与作为命令行参数传入的正则表达式匹配的行。
默认情况下,脚本会进行不区分大小写的搜索(我想要这种方式)。
如何在正则表达式参数中传递 -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)'
推荐阅读
- qt - 如何使用来自外部 QML 文件的内部 QML 类型?
- python - 需要从宽转换为长
- go - 在 Golang 中使用反射覆盖结构值
- bash - Bash 脚本从存储在变量中的列表创建新文件夹
- android - 使用 Material Design 主题时如何自定义 TextInputLayout?
- google-bigquery - 如何在 BigQuery 标准 SQL 中获取数组的切片?
- mysql - 我无法更新我的实体表(Spring Boot 2 hibernate 5)
- firebase - 通过电子邮件从 Firebase 发送调查链接
- r - 线性回归:行(作为观察)与变量
- python - 用于请求调用 Google Maps API 的 python 字符串编码