我有包含占位符的字符串,我想提取这些占位符。
示例:" Hello %s, your balance is %d%%"
q = re.compile(r'\%(\w+)%\]')
p= q.findall(string)
^不起作用。
有没有办法提取这两个占位符?即使他们有不同的格式?
答案 0 :(得分:3)
q = re.compile(r'%(\w+)%?')
这应该为你做。参见演示。
https://www.regex101.com/r/rC2mH4/11
事实上当你不想要%
时,你可以使用环视来制作0 width assertion
。
(?<=%)(\w+)%?
参见演示。
答案 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。请注意,这对于您当前的示例来说是非常过分的,但如果您想处理任意字符串则必须这样做。