如何使用Python正则表达式将花括号中的文本替换为另一个基于比较的文本

如何使用Python正则表达式将花括号中的文本替换为另一个基于比较的文本,python,regex,Python,Regex,我对正则表达式一无所知。我有一个字符串如下所示: str = "abc/def/([default], [testing])" 还有一本字典 dict = {'abc/def/[default]' : '2.7', 'abc/def/[testing]' : '2.1'} 使用Python RE,我希望在比较dict和str中的每个元素后,str采用这种形式: str = "abc/def/(2.7, 2.1)" 如何使用pythonre实现这一点,有什么帮助吗 顺便说一句,这不是任何任务

我对正则表达式一无所知。我有一个字符串如下所示:

str = "abc/def/([default], [testing])"
还有一本字典

dict = {'abc/def/[default]' : '2.7', 'abc/def/[testing]' : '2.1'}
使用Python RE,我希望在比较dict和str中的每个元素后,str采用这种形式:

str = "abc/def/(2.7, 2.1)"
如何使用pythonre实现这一点,有什么帮助吗


顺便说一句,这不是任何任务的一部分,而是我工作项目的一部分,我花了很多时间想办法,但都没有用。

这里可能不需要正则表达式。希望这有帮助

lhs,rhs = str.split("/(")                                          
rhs1,rhs2 = rhs.strip(")").split(", ")                             
lhs+="/"                                                           
print "{0}({1},{2})".format(lhs,dict[lhs+rhs1],dict[lhs+rhs2])
输出

abc/def/(2.7,2.1)
输出:

abc/def/(2.7, 2.1, [something])    

下面是一个使用
re
模块的解决方案

假设:

  • 有一个字典,它的键由前缀和可变部分组成,可变部分用括号括起来(
    []
  • 这些值是字符串,用于替换字符串中的变量部分
  • 字符串由前缀、一个
    、一个可变部分列表和一个
  • 字符串中的可变部分包含在
    []
  • 字符串中的变量部分由逗号和可选空格分隔
Python代码:

import re

class splitter:
    pref = re.compile("[^(]+")
    iden = re.compile("\[[^]]*\]")
    def __init__(self, d):
        self.d = d
    def split(self, s):
        m = self.pref.match(s)
        if m is not None:
            p = m.group(0)
            elts = self.iden.findall(s, m.span()[1])
            return p, elts
        return None
    def convert(self, s):
        p, elts = self.split(s)
        return p + "(" + ", ".join((self.d[p + elt] for elt in elts)) + ")"
用法:

s = "abc/def/([default], [testing])"
d = {'abc/def/[default]' : '2.7', 'abc/def/[testing]' : '2.1'}
sp = splitter(d)
print(sp.convert(s))
输出:

abc/def/(2.7, 2.1)

正则表达式是否进行字符串比较?除了
abc/def/
,是否还有其他前缀?我不认为
str=str.replace(“[default]”,“.2.7”)。replace(“[testing]”,“.2.1”)
足够好用了?没有前缀会像abc/def/我不理解你的最后一条评论。我们可以忽略
abc/def/
前缀吗?还是这很重要?
[默认值]
是否总是替换为
2.7
?根据我的问题,它可以正常工作,但忽略了前缀的比较,即abc/def/;标签[默认值]仅应替换为2.7 iff前缀abc/def/in st等于abc/def/in dic。希望你明白我的意思,明白了。编辑的代码会考虑前缀。
abc/def/(2.7, 2.1)