Python在两个分隔符之间查找多个出现情况

0 投票
3 回答
1067 浏览
提问于 2025-04-18 17:38

我正在尝试使用正则表达式找到两个分隔符之间的多个出现情况。
可惜我不知道该怎么做。
这两个分隔符是 ' 和 ':

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)

这样就可以了。

撰写回答