我目前正在以这种方式格式化字符串:
import re
res = re.sub(r'\d+\.\d{1,}', lambda m: format(float(m.group(0)), '.1f'), res)
这会将所有数字都截断到小数点后一位。我想在这里放置一个例外,即只有在数字后没有字母l
的情况下,才应这样做。例如,'Yesterday I drank 8.567 coke bottles of 0.85L'
将被格式化为'Yesterday I drank 8.5 coke bottles of 0.85L
仍在努力使用正则表达式...
答案 0 :(得分:3)
import re
res = re.sub(r'\d+\.\d+(?![lL\d])', lambda m: format(float(m.group(0)), '.1f'), res)
# ^^^^^^^^^^
答案 1 :(得分:1)
输入0.8885L
之类的当前答案fails。您可以使用以下内容:
import re
res = re.sub(r'\d+\.\d+(?![L\d])', lambda m: format(float(m.group(0)), '.1f'), res, flags=re.I)
对正则表达式所做的更改:
{1,}
替换为+
,因为它们执行相同的操作。(?![L\d])
,表示“不跟字母L或数字”。re.I
,表示“忽略大小写”。注意:如果您不想应用re.I
标志,则可以改用以下模式:
\d+\.\d+(?![Ll\d])