我对正则表达式很陌生。我有一个看起来像这样的字符串:
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)"
如何使用Python RE做任何帮助?
P.S。它不是任何任务的一部分,而是我的工作项目的一部分,我花了很多时间来找出解决方案但是徒劳无功。
答案 0 :(得分:0)
这里可能不需要正则表达式。希望这有帮助
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)
答案 1 :(得分:0)
import re
st = "abc/def/([default], [testing], [something])"
dic = {'abc/def/[default]' : '2.7',
'abc/def/[testing]' : '2.1',
'bcd/xed/[something]' : '3.1'}
prefix_regex = "^[\w*/]*"
tag_regex = "\[\w*\]"
prefix = re.findall(prefix_regex, st)[0]
tags = re.findall(tag_regex, st)
for key in dic:
key_prefix = re.findall(prefix_regex, key)[0]
key_tag = re.findall(tag_regex, key)[0]
if prefix == key_prefix:
for tag in tags:
if tag == key_tag:
st = st.replace(tag, dic[key])
print st
<强>输出:强>
abc/def/(2.7, 2.1, [something])
答案 2 :(得分:0)
以下是使用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)