我正在尝试使用Python的re.sub()
来匹配字符串和e
字符,并在e
字符后面和最后一个字符后插入花括号。例如:
12.34e56 to 12.34e{56}
1e10 to 1e{10}
我似乎无法找到正确的正则表达式来插入所需的花括号。例如,我可以正确插入左括号:
>>> import re
>>> x = '12.34e10'
>>> pattern = re.compile(r'(e)')
>>> sub = z = re.sub(pattern, "\1e{", x)
>>> print(sub)
12.34e{10 # this is the correct placement for the left brace
使用两个反向引用时出现问题。
>>> import re
>>> x = '12.34e10'
>>> pattern = re.compile(r'(e).+($)')
>>> sub = z = re.sub(pattern, "\1e{\2}", x)
>>> print(sub)
12.34e{} # this is not what I want, digits 10 have been removed
有人可以指出我的问题吗?谢谢你的帮助。
答案 0 :(得分:7)
re.sub(r'e(\d+)', r'e{\1}', '12.34e56')
返回'12.34e{56}'
或者,结果相同但逻辑不同(不要将e
替换为e
):
re.sub(r'(?<=e)(\d+)', r'{\1}', '12.34e56')
答案 1 :(得分:1)
您的大括号放置不正确。
这是一个解决方案,确保在e
之前有一个带可选小数位的数字:
import re
samples = ['12.34e56','1e10']
for s in samples:
print re.sub(r'(\d+(?:\.\d+)?)e([0-9]+)',"\g<1>e{\g<2>}",s)
收率:
12.34e{56} 1e{10}