首页 > 解决方案 > 查找字符串中所有占位符的pythonic方法

问题描述

我有一个字符串,其中包含占位符,由“%”包围。我想获得这些占位符的列表。我试过这个正则表达式

m = re.search('%s(.*)%s' % ('\%', '\%'), message)

在以下字符串上

black %brown% fox jumped over the %lazy% dog

我希望得到

['brown', 'lazy']

但相反,我得到

'brown% fox jumped over the %lazy'

标签: pythonregexsubstring

解决方案


默认情况下,搜索是在贪婪模式下进行的:它将尝试找到最长的匹配文本。

你有两个解决方案:

  • 执行非贪婪搜索(正如 JvdV 和 xdhmoore 在评论部分指出的那样),在:?旁边添加一个*(.*?)

  • 编辑您的正则表达式以禁止%占位符内的任何内容,使用[^%]代替.

    m = re.search('%([^%]*)%', message)
    

注意:我删除了百分比字符串格式。我相信你想参数化占位符边界,但现在我可能会同意 chepner 的意见,我删除了它并在原地编写了普通的正则表达式。


推荐阅读