簡體   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