在各类文本处理场景中,我们经常会遇到固定格式的模板字符串,模板中预留了特定空白区域供用户填写内容,后续需要将这些用户填写的内容从完整字符串中识别提取出来。比如问卷模板、合同模板、固定格式的地址字符串等,都是这类场景的典型代表。

核心实现思路
要准确识别用户填写的空白内容,核心是先明确模板的固定结构,再通过匹配规则定位用户填写的区域。通常我们会使用占位符来标记模板中的空白位置,比如用${placeholder}或者{}作为占位符标识,再通过正则表达式匹配占位符之间的内容,从而提取出用户填写的部分。
步骤拆解
- 第一步:定义模板的占位符规则,明确模板中哪些部分是固定内容,哪些是需要提取的用户填写内容
- 第二步:根据占位符规则编写对应的正则表达式,确保能精准匹配用户填写的内容区域
- 第三步:将用户输入的完整字符串和正则规则进行匹配,提取出对应的内容片段
- 第四步:处理特殊边界情况,比如用户填写内容包含占位符特殊字符、填写内容为空等场景
JavaScript实现示例
假设我们的模板格式为姓名:${name},年龄:${age},地址:${address},用户填写后的完整字符串为姓名:张三,年龄:25,地址:北京市海淀区,我们可以通过以下代码提取内容:
// 定义模板字符串
const template = '姓名:${name},年龄:${age},地址:${address}';
// 用户填写后的完整字符串
const userInput = '姓名:张三,年龄:25,地址:北京市海淀区';
// 生成正则:将模板中的${xxx}替换为(.*?)非贪婪匹配分组
const regStr = template.replace(/${([^}]+)}/g, '(.*?)');
const reg = new RegExp(regStr);
// 执行匹配
const matchResult = userInput.match(reg);
// 提取占位符名称和对应的用户填写内容
const placeholderNames = [];
template.replace(/${([^}]+)}/g, (_, name) => {
placeholderNames.push(name);
});
const result = {};
placeholderNames.forEach((name, index) => {
// matchResult[0]是完整匹配,从索引1开始是分组内容
result[name] = matchResult[index + 1] || '';
});
console.log(result);
// 输出:{ name: '张三', age: '25', address: '北京市海淀区' }
Python实现示例
同样的模板规则,在Python中可以使用re模块实现:
import re
# 定义模板和用户填写字符串
template = "姓名:${name},年龄:${age},地址:${address}"
user_input = "姓名:张三,年龄:25,地址:北京市海淀区"
# 提取占位符名称
placeholder_names = re.findall(r'${([^}]+)}', template)
# 生成正则字符串
reg_str = re.sub(r'${([^}]+)}', r'(.*?)', template)
pattern = re.compile(reg_str)
# 执行匹配
match_result = pattern.match(user_input)
result = {}
if match_result:
for i, name in enumerate(placeholder_names):
result[name] = match_result.group(i + 1) if match_result.group(i + 1) else ""
print(result)
# 输出:{'name': '张三', 'age': '25', 'address': '北京市海淀区'}
注意事项
在实际使用中,需要注意几个常见问题:
- 如果模板中的固定内容包含正则特殊字符,比如
.、*、?等,生成正则前需要对这些字符进行转义,避免正则匹配出错 - 如果用户填写的内容可能包含换行符,需要将正则的
.匹配规则改为包含换行,比如在JavaScript正则后添加s修饰符,Python中使用re.DOTALL标志 - 当存在多个相同占位符时,需要额外处理重复的占位符名称,避免提取结果覆盖
- 如果用户输入的字符串不符合模板格式,需要做好容错处理,避免程序报错
适用场景扩展
这种从模板字符串中识别空白内容的方法,除了基础的文本提取场景,还可以扩展到更多业务中:比如自动填充表单时校验用户填写内容是否符合模板格式、批量处理固定格式的日志提取关键信息、生成定制化文档时替换模板内容等。只要明确模板的固定规则和占位符格式,都可以通过调整正则规则适配不同的需求。