Python在两个分隔符之间查找多个出现情况
我正在尝试使用正则表达式找到两个分隔符之间的多个出现情况。
可惜我不知道该怎么做。
这两个分隔符是 ' 和 ':
import re
string = "'lightOff' 'lightOn':,'lightOff' 'ovenOff' 'ovenOn': None 'radioOn': 'radioOff'"
print string
print 'newString', re.findall("^'(.*?)':", string)
我只得到了第一个匹配的结果
'lightOn'
我想要的是获取 ' 和 ' 之间的三个子字符串:
'lightOn'
'ovenOn'
'radioOn'
3 个回答
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
0
我想要的是获取在'和'之间的三个子字符串。
(?<=')[^']+(?=':)
这里有一个示例。
还有一篇值得阅读的文章,关于✽ 想要懒惰?三思而后行。
,讨论性能和回溯。
不过,懒惰量词是有
成本
的:在每一步的花括号内,程序首先尝试懒惰选项(不匹配任何字符),然后尝试匹配下一个标记(闭合花括号),接着就得回溯。因此,懒惰量词在每一步都会导致回溯
。
1
不要使用锚点。^
和 $
是正则表达式中的锚点。此外,当你在两个 '
之间进行匹配时,它会返回字符串 'word1' 'word2':
作为输出,而不是仅仅返回 'word2':
。尝试匹配两个 '
之间的所有内容,但不包括 '
这个字符本身。
re.findall("'([^']+)':", string)
这样就可以了。