import re
input = 'I like {sushi} and {tempura}'
lst = re.findall('{[(a-zA-Z)]*}',input)
src = re.sub('{[a-zA-Z]*}','*',input)
print lst
['sushi', 'tempura']
print src
I like * and *
>>> import string
>>> s = 'I like {sushi} and {tempura}.'
>>> parsed = string.Formatter().parse(s)
>>> fields = [p[1] for p in parsed if p[1]]
>>> src = s.format(**{f: '*' for f in fields})
>>> fields
['sushi', 'tempura']
>>> src
'I like * and *.'
一个易于理解的方法,它匹配
{}
之间的文本如果要匹配
{}
之间的任何内容,则需要使用'{[^}]*}'
,如mgilsons answer所示,或来自DSM的{(.*?)}
。在也可以使用字符串格式进行替换:
^{pr2}$regex分解(注意我使用了一个原始字符串[
r'...'
]):\{
查找文本{[^\}]
匹配任何不是文本'}'*
尽可能多地匹配它。在\}
匹配文本'}'添加括号以在
re.findall
的匹配中进行分组。在正如DSM指出的,查找标记之间文本的另一个常见习惯用法是:
^{3}$也就是说:
\{
匹配文本{(.*?)
匹配任何内容,但不要贪心(不要吃re在下一个匹配部分可以使用的东西)'\}'
匹配文本'}'因为我无法阻止自己尝试寻找非正则表达式的方法来做事情,下面是一种使用标准字符串格式的方法:
相关问题 更多 >
编程相关推荐