如何从文本中提取{{}}包裹的特定字符串并将其存入数组?
提取{{}}包裹内容的实现方案
核心思路
通过正则表达式全局匹配所有被{{}}包裹的内容,使用非贪婪匹配规则避免多个占位符连用时匹配范围出错,直接提取捕获组的内容存入数组即可。
常见语言实现示例
JavaScript
const inputText = "Hello {{name}}, I am {{virtual_assistant_name}}, virtual assistant of {{company_name}}."; const placeholderRegex = /{{(.*?)}}/g; const resultArr = []; let matchItem; while ((matchItem = placeholderRegex.exec(inputText)) !== null) { resultArr.push(matchItem[1]); } // 输出结果:['name', 'virtual_assistant_name', 'company_name'] console.log(resultArr);
Python
import re input_text = "Hello {{name}}, I am {{virtual_assistant_name}}, virtual assistant of {{company_name}}." result_arr = re.findall(r'{{(.*?)}}', input_text) # 输出结果:['name', 'virtual_assistant_name', 'company_name'] print(result_arr)
PHP
$inputText = "Hello {{name}}, I am {{virtual_assistant_name}}, virtual assistant of {{company_name}}."; preg_match_all('/{{(.*?)}}/', $inputText, $matches); $resultArr = $matches[1]; // 输出结果:Array ( [0] => name [1] => virtual_assistant_name [2] => company_name ) print_r($resultArr);
规则说明
- 正则中的
{{、}}匹配字面量的左右双大括号 - 捕获组
(.*?)的?代表非贪婪匹配,会在遇到最近的}}时停止匹配,避免同时匹配到多个占位符的内容 - 如果占位符内容包含换行,需要开启正则的单行匹配模式:JavaScript添加
s修饰符写成/{{(.*?)}}/gs,Python添加re.DOTALL参数写成re.findall(r'{{(.*?)}}', input_text, re.DOTALL)
内容的提问来源于stack exchange,提问作者bBraian
相关产品推荐
相关产品推荐

