python在2个分隔符之间查找多个匹配项

时间:2014-08-18 10:02:40

标签: python regex

我试图使用正则表达式在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'

3 个答案:

答案 0 :(得分:1)

不要使用锚。 ^$是正则表达式模式中的锚点。此外,当您在两个'之间进行匹配时,它会返回字符串'word1' 'word2':作为输出,而不仅仅是'word2':。尝试匹配两个'之间的所有内容,而不是字符'本身。

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

会奏效。

答案 1 :(得分:0)

  

我想要的是获得'之间的3个子串。和'

尝试不使用LookaroundCharacter class

捕获群组
(?<=')[^']+(?=':)

这是demo

✽ Want to Be Lazy? Think Twice. 关于效果追溯

的值得阅读的帖子
  

然而,一个惰性量词有cost:在大括号内的每一步,引擎首先尝试延迟选项(匹配无字符),然后尝试匹配下一个标记(右大括号),然后必须回溯。因此,惰性量词在每一步都会导致backtracking

enter image description here

答案 2 :(得分:0)

以下正则表达式也可以,

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

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