[英]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個子字符串
只需嘗試不使用Lookaround和Character類捕獲組
(?<=')[^']+(?=':)
這是演示
值得一讀的✽ 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.