我有一个输入字段,用户可以插入包含在*中的变量,然后使用正则表达式获取变量,并尝试在dict中查找它们,然后在输入字符串中替换它们。在下面的代码中,我成功地编写了正则表达式,该正则表达式获取变量,然后将其匹配,并创建一个包含值的列表,但我不确定如何使用它替换字符串中的内容
variables = {
'*FFullName*': 'Raz Smith',
'*FFirstName*': 'Raz',
'*FSurname*': 'Smith',
'*Subject*': 'hello',
'*Day*': '27',
}
input = '*Day* *Subject* to *FFirstName* *FSurname*'
#get all the *variables* and add to list
var_input = re.findall('(\*.*?\*)', input)
#match above list with dict
match = list(map(variables.__getitem__, var_input))
#how to replace these in input?
#expected outcome: input = '27 Hello to Raz Smith'
我使用了下面的代码,在这里找到,但是,当输入字段中的变量没有空间时,它不匹配
#example of input not working correctly
input = '*Day**Subject*to*FFirstName**FSurname*'
pattern = re.compile(r'(?<!\*)(' + '|'.join(re.escape(key) for key in variables.keys()) + r')(?!\*)')
result = pattern.sub(lambda x: variables[x.group()], input)
你可以用
见Python demo
您不需要捕获整个匹配项,这就是现在从模式中删除
(
和)
的原因\*[^*]*\*
模式匹配一个*
,然后匹配除*
之外的零个或多个字符,然后匹配一个*
整个匹配通过lambda表达式传递给
re.sub
替换参数,variables.get(x.group(), x.group())
从variables
字典中获取相应的值,或者如果没有匹配值作为键的项,则将匹配放回相关问题 更多 >
编程相关推荐