我试图改变字符串,比如s='2.3^2+3^3-√0.04*2+√4', 其中2.3^2必须改为pow(2.3,2),3^3-pow(3,3),√0.04-sqrt(0.04)和 √4-平方英尺(4)。在
s='2.3^2+3^3-√0.04*2+√4'
patt1='[0-9]+\.[0-9]+\^[0-9]+|[0-9]+\^[0-9]'
patt2='√[0-9]+\.[0-9]+|√[0-9]+'
idx1=re.findall(patt1, s)
idx2=re.findall(patt2, s)
idx11=[]
idx22=[]
for i in range(len(idx1)):
idx11.append('pow('+idx1[i][:idx1[i].find('^')]+','+idx1[i][idx1[i].find('^')+1:]+')')
for i in range(len(idx2)):
idx22.append('sqrt('+idx2[i][idx2[i].find('√')+1:]+')')
for i in range(len(idx11)):
s=re.sub(idx1[i], idx11[i], s)
for i in range(len(idx22)):
s=re.sub(idx2[i], idx22[i], s)
print(s)
温度结果:
idx1=['2.3^2', '3^3']
idx2=['√0.04', '√4']
idx11=['pow(2.3,2)', 'pow(3,3)']
idx22=['sqrt(0.04)', 'sqrt(4)']
但是字符串结果:
^{pr2}$为什么计算'idx1'是正确的,但是re.sub公司不将此值插入字符串? (对不起我的英语:)
我只有Python2.7.5,但这对我很有用,使用}。一旦您开始寻找匹配项并构建它们的替换项,这是一个简单的查找和替换任务:
str.replace
而不是{编辑
我想你在这件事上说得太多了。您可以一次性使用
^{pr2}$re.sub
进行以下更改:{cd5>将取代{cd5}:
将
√0.04*2+√4
替换为sqrt(0.04)*2+sqrt(4)
这里有些事情是不同的。首先,
\d
,它匹配一个数字,与[0-9]
相同。第二,( )
捕获它们内部的任何内容。在替换中,您可以按这些已捕获组的出现顺序来引用它们。在pow
示例中,我使用了捕获的第一个和第三个组。在替换字符串之前的前缀
r
意味着该字符串将被视为“raw”,因此字符按字面解释。组由\1
,\2
等访问。但是由于反斜杠\
是转义字符,所以每次(\\1
,\\2
等)都必须转义,而不使用r
。在仅使用
re.sub()
尝试此操作输入字符串:
替换
^{pr2}$pow()
替换
sqrt()
输出:
()
表示组捕获,\\1
表示正则表达式匹配中第一个捕获的组。使用this link可以获得正则表达式的详细说明。在相关问题 更多 >
编程相关推荐