查找占位符子字符串

时间:2015-02-04 14:58:02

标签: python regex

我有包含占位符的字符串,我想提取这些占位符。

示例:" Hello %s, your balance is %d%%"

q = re.compile(r'\%(\w+)%\]')
p= q.findall(string)

^不起作用。

有没有办法提取这两个占位符?即使他们有不同的格式?

3 个答案:

答案 0 :(得分:3)

q = re.compile(r'%(\w+)%?')

这应该为你做。参见演示。

https://www.regex101.com/r/rC2mH4/11

事实上当你不想要%时,你可以使用环视来制作0 width assertion

(?<=%)(\w+)%?

参见演示。

https://www.regex101.com/r/rC2mH4/12

答案 1 :(得分:0)

您可能需要查看template strings

然后你可以简单地写:

from string import Template
s = Template('Hello $name, your balance is $balance')
print s.substitute(name='user1322582', balance=33)
# output: Hello user1322582, your balance is 33

答案 2 :(得分:0)

The documentation解释了字符串格式化的选项&#34;转换规范&#34 ;;如果你需要一切,你可以使用类似的东西:

>>> import re
>>> s = " Hello %s,  your balance is %d%%"
>>> pattern = r'''
    %                            # start of specifier
    (?P<key>\([^\)]*\))?         # optional mapping key
    (?P<flags>[#0\- +])*         # optional conversion flags
    (?P<width>\*|\d*)?           # optional minimum field width
    (?P<precision>\.\*|\.\d*)?   # optional precision
    (?P<lenmod>[hlL])?           # optional length modifier
    (?P<type>[diouxXeEfFgGcrs%]) # conversion type
'''
>>> [g.groupdict() for g in re.finditer(pattern, s, re.VERBOSE)]
[{'precision': None, 'width': None, 'flags': None, 'key': None, 'lengthmod': None, 'type': 's'}, 
 {'precision': None, 'width': None, 'flags': None, 'key': None, 'lengthmod': None, 'type': 'd'}, 
 {'precision': None, 'width': None, 'flags': None, 'key': None, 'lengthmod': None, 'type': '%'}]

请参阅演示here。请注意,这对于您当前的示例来说是非常过分的,但如果您想处理任意字符串则必须这样做。