Python 正则表达式在同一分隔符之间匹配多个结果
非常差的标题-如果您觉得有帮助,请随时更新 我正试图返回一个列表Python 正则表达式在同一分隔符之间匹配多个结果,python,regex,python-3.x,Python,Regex,Python 3.x,非常差的标题-如果您觉得有帮助,请随时更新 我正试图返回一个列表 [,…,] 在以下字符串中: “%%%%\u任何东西都可以在这里\u%%%” 以下代码可以工作,但如果行中的“%%”数大于2,则会占用第一组和最后一组“%%”之间的所有内容 >>> import re >>> str = '%%nas_ip_address%%' >>> re.match('%%(.*)%%', str, re.DOTALL).group(1) 'nas_ip_
[,…,]
在以下字符串中:
“%%%%\u任何东西都可以在这里\u%%%
”
以下代码可以工作,但如果行中的“%%
”数大于2,则会占用第一组和最后一组“%%
”之间的所有内容
>>> import re
>>> str = '%%nas_ip_address%%'
>>> re.match('%%(.*)%%', str, re.DOTALL).group(1)
'nas_ip_address'
>>> str = '%%nas_ip_address%%:/vx/%%sfs_storage_pool%%'
>>> re.match('%%(.*)%%', str, re.DOTALL).group(1)
'nas_ip_address%%:/vx/%%sfs_storage_pool'
>>> re.match('%%(.*)%%', str, re.DOTALL).groups()
('nas_ip_address%%:/vx/%%sfs_storage_pool',)
是否有一种方法可以使用正则表达式从字符串中提取
['nas\u ip\u address','sfs\u storage\u pool']
?我希望解析一个非常大的文件,但是性能不是问题,因为它不是用于生产的如果要在同一字符串中匹配多个结果,可以使用re.findall()
试试这个:
import re
str = '%%nas_ip_address%%:/vx/%%sfs_storage_pool%%'
re.findall('%%(.*?)%%', str, re.DOTALL)
如果要在同一字符串中匹配多个结果,可以使用
re.findall()
试试这个:
import re
str = '%%nas_ip_address%%:/vx/%%sfs_storage_pool%%'
re.findall('%%(.*?)%%', str, re.DOTALL)
因为默认情况下,
*
是贪婪的,这意味着它将消耗所有内容直到结束,然后一次回溯一个字符,直到找到最接近的%%
,接近字符串结尾
有两种方法可以防止它:
*?
%
的风险,则最好添加对比度并使用否定字符类[^%]*
因为默认情况下,
*
是贪婪的,这意味着它将消耗所有内容直到结束,然后一次回溯一个字符,直到找到最接近的%%
,接近字符串结尾
有两种方法可以防止它:
*?
%
的风险,则最好添加对比度并使用否定字符类[^%]*
({2,})(.*)\1
?捕获组2({2,})(.*)\1
?捕获组2