繁体   English   中英

正则表达式在同一定界符之间匹配多个结果

[英]Regex match multiple results between the same delimiters

标题很差-如果您觉得有帮助,请随时更新

我正在尝试返回列表

[<str1>, <str2>,...,<strX>]

在以下字符串中:

' %%<str1>%%_Anything_Can_Be_Here_%%<str2>%% '

以下代码可以工作,但是如果该行中' %% '的数量大于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_ip_address', 'sfs_storage_pool'] 我想解析一个很大的文件,但是性能不是问题,因为它不是用于生产的

如果要匹配同一字符串中的多个结果,可以使用re.findall()

尝试这个:

import re
str = '%%nas_ip_address%%:/vx/%%sfs_storage_pool%%'
re.findall('%%(.*?)%%', str, re.DOTALL)

因为*默认情况下是贪婪的,所以这意味着它将消耗所有内容直到结尾,然后一次回溯一个字符,直到找到最接近字符串%%的最接近的%%为止。

防止它的两个选择:

  1. 使用惰性量词*?
  2. 如果之间没有发生%风险,甚至更好,请添加对比度并使用否定的字符类[^%]*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM