python - 提取并替换字符串中占位符之间的子字符串

标签 python regex

我有一个输入文本,

input = 'I like {sushi} and {tempura}.'

并希望从中获取列表和替换的 src。

lst = ['sushi', 'tempura']
src = 'I like * and *.'

我可以在输入/输出字符串中使用任何标记来代替 {}*,例如 [] 或其他东西。

最佳答案

import re
input = 'I like {sushi} and {tempura}.'
regex = re.compile(r'\{([^\}]*)\}')
lst = regex.findall(input)            #['sushi','tempura']
mod_str = regex.sub('*',input)        #I like * and *.
print (lst)
print (mod_str)

您还可以使用字符串格式进行替换:

mod_str = input.format(**dict((x,'*') for x in lst))

正则表达式分解(注意我使用了原始字符串 [r'...']):

  • \{ -- 查找文字 '{'
  • [^\}] -- 匹配任何不是文字 '}' 的内容
  • * -- 尽可能多次匹配。
  • \} -- 匹配文字 '}'

添加括号以在 re.findall 的匹配中进行分组。


正如 DSM 所指出的,另一种用于查找标记之间文本的常见习惯用法是:

r"\{(.*?)\}"

这意味着:

  • \{ -- 匹配文字 '{'
  • (.*?) -- 匹配任何东西,但不要贪心 --(不要吃下一部分 re 可以使用的东西匹配)
  • '\}' -- 匹配文字'}'

关于python - 提取并替换字符串中占位符之间的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315922/

相关文章:

c# - 从字符串的开头和结尾删除 BR 标记

java - 非捕获组正则表达式在 Java 中不起作用

python - 转换 DD/MM/YYYY HH :MM:SS into MySQL TIMESTAMP

python - 如何从 Python 运行时云函数访问 Google Cloud Platform Firestore 触发器

python - MongoDB:无法启动副本集; 'has data already, cannot initiate set'

java - 如何在一行中替换多个字符串?

python - 正则表达式提取未知数字格式的负数

python - 如何处理 PythonCard 中的 mouseMiddleDrag 事件?

python - Tkinter 小部件验证问题 - 再次出现

python - pandas 数组索引不足