如何在python中向regex添加修饰符?

时间:2015-08-10 09:51:26

标签: python regex

我想添加这两个修饰符:g - global,i - insensitive

这是我的剧本的一部分:

search_pattern =  r"/somestring/gi"
pattern = re.compile(search_pattern)

queries = pattern.findall(content)

但它不起作用 修饰符在此页面上https://regex101.com/

3 个答案:

答案 0 :(得分:3)

首先,我建议您通过检查所有资源和部分来学习regex101.com功能。单击左侧的代码生成器链接时,您始终可以看到Python(以及PHP和JS)代码。

如何获取g全局搜索行为?

如果您没有捕获组,Python中的findall将为您提供匹配的文本。因此,对于r"somestring"findall就足够了。 如果您有捕获组,但需要完整匹配,则可以使用finditer并访问.group(0)

如何获取不区分大小写的行为?

i修饰符可用作re.I中的re.IGNORECASEpattern = re.compile(search_pattern, re.I)修饰符。此外,您可以使用内联标记:pattern = re.compile("(?i)somestring")

关于正则表达式分隔符的说法

而不是search_pattern = r"/somestring/gi",您应该使用search_pattern = r"somestring"。这是因为标志作为单独的参数传递,并且所有操作都是作为单独的re方法实现的。

所以,你可以使用

import re
p = re.compile(r'somestring', re.IGNORECASE)
test_str = "somestring"
re.findall(p, test_str)

或者

import re
p = re.compile(r'(?i)(some)string')
test_str = "somestring"
print([(x.group(0),x.group(1)) for x in p.finditer(test_str)])

请参阅IDEONE demo

答案 1 :(得分:0)

search_pattern =  r"somestring"
pattern = re.compile(search_pattern,flags=re.I)
                                          ^^^   
print pattern.findall("somestriNg")

您可以这样设置flagsfindall默认为global。此外,您在python中不需要delimiters

答案 2 :(得分:0)

当我开始使用python时,我也想知道同样的问题。但不幸的是,python没有为创建正则表达式提供特殊的分隔符。在一天结束时,正则表达式只是字符串。因此,与javascript或ruby不同,您不能指定修饰符和字符串。

相反,您需要使用修饰符编译正则表达式。

regex = re.compile(r'something', re.IGNORECASE | re.DOTALL)
queries = regex.findall(content)