我想添加这两个修饰符:g - global,i - insensitive
这是我的剧本的一部分:
search_pattern = r"/somestring/gi"
pattern = re.compile(search_pattern)
queries = pattern.findall(content)
但它不起作用 修饰符在此页面上https://regex101.com/
答案 0 :(得分:3)
首先,我建议您通过检查所有资源和部分来学习regex101.com功能。单击左侧的代码生成器链接时,您始终可以看到Python(以及PHP和JS)代码。
如何获取g
全局搜索行为?
如果您没有捕获组,Python中的findall
将为您提供匹配的文本。因此,对于r"somestring"
,findall
就足够了。
如果您有捕获组,但需要完整匹配,则可以使用finditer
并访问.group(0)
。
如何获取不区分大小写的行为?
i
修饰符可用作re.I
中的re.IGNORECASE
或pattern = 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")
您可以这样设置flags
。findall
默认为global
。此外,您在python中不需要delimiters
。
答案 2 :(得分:0)
当我开始使用python时,我也想知道同样的问题。但不幸的是,python没有为创建正则表达式提供特殊的分隔符。在一天结束时,正则表达式只是字符串。因此,与javascript或ruby不同,您不能指定修饰符和字符串。
相反,您需要使用修饰符编译正则表达式。
regex = re.compile(r'something', re.IGNORECASE | re.DOTALL)
queries = regex.findall(content)