簡體   English   中英

python查找2個定界符之間的多次出現

[英]python finding multiple occurrences between 2 delimiter

我正在嘗試使用正則表達式查找2個定界符之間的多次出現。 不幸的是我不知道怎么做。 2個分隔符是'和':

import re
string = "'lightOff' 'lightOn':,'lightOff' 'ovenOff' 'ovenOn': None 'radioOn': 'radioOff'"
print string
print 'newString', re.findall("^'(.*?)':", string)

我只有第一場比賽

'lightOn'

我想要的是獲取'和'之間的3個子字符串:

'lightOn'
'ovenOn'
'radioOn'

不要使用錨。 ^$是正則表達式模式的錨點。 另外,當您在兩個'匹配時,它將返回字符串'word1' 'word2':作為輸出,而不是僅返回'word2': 嘗試匹配兩個'不是字符'本身之間的所有內容。

re.findall("'([^']+)':", string)

將工作。

我想要的是讓'和'之間的3個子字符串

只需嘗試不使用LookaroundCharacter類捕獲組

(?<=')[^']+(?=':)

這是演示

值得一讀的✽ Want to Be Lazy? Think Twice. ✽ Want to Be Lazy? Think Twice. 性能回溯

但是,惰性量詞有一個cost :在括號內的每個步驟中,引擎首先嘗試延遲選項(不匹配字符),然后嘗試與下一個標記匹配(右括號),然后必須回溯。 因此,惰性量詞在每個步驟都會導致backtracking

在此處輸入圖片說明

以下正則表達式也可以使用,

'[^']*'(?=:)

python代碼是

>>> import re
>>> string = "'lightOff' 'lightOn':,'lightOff' 'ovenOff' 'ovenOn': None 'radioOn': 'radioOff'"
>>> m = re.findall(r"'[^']*'(?=:)", string)
>>> for i in m:
...     print i
... 
'lightOn'
'ovenOn'
'radioOn'

如果您不想在最終結果中包含' ,請使用先行和后備。

>>> m = re.findall(r"(?<=')[^']*(?=':)", string)
>>> for i in m:
...     print i
... 
lightOn
ovenOn
radioOn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM