替换符号字符串+有理数python
replace string of symbol+ rational number python
我有一个很大的语料库,其中包含
text = [".4 million but not section 4.1"]
我想清理为
text = [",4 million but not section 4.1"]
使用简单的一行,例如
text.replace("$\d.\d","$\d,\d")
或 re.sub
。
但我不知道如何将字符串 "$"+digit+"." 映射到 "$"+digit+","
有什么想法吗?
谢谢
def rep(m):
return m.group(1) + "," + m.group(2)
re.sub("([$][0-9]+).([0-9]+)",rep,text)
如果您有几行要匹配,我建议您编译您的模式。假设它们都遵循接近于此的模式,您可以执行以下操作:
import re
p = re.compile(r"($\d+)\.(\d+)")
lines_before = [
".4 million but not section 4.1",
".6 foo 43.54",
]
lines_after = [p.sub(r",", l) for l in lines_before]
print(lines_after)
输出:
[',4 million but not section 4.1', ',6 foo 43.54']
说明
首先,编译一个正则表达式,匹配任意位置的文字“$”,后跟一位或多位数字,后跟文字“.”,再后跟一位或多位数字。这会捕获“.”前后的部分。
然后,对于每一行,将匹配项替换为捕获组 1,后跟“,”,最后添加第二个捕获组。
我有一个很大的语料库,其中包含
text = [".4 million but not section 4.1"]
我想清理为
text = [",4 million but not section 4.1"]
使用简单的一行,例如
text.replace("$\d.\d","$\d,\d")
或 re.sub
。
但我不知道如何将字符串 "$"+digit+"." 映射到 "$"+digit+","
有什么想法吗? 谢谢
def rep(m):
return m.group(1) + "," + m.group(2)
re.sub("([$][0-9]+).([0-9]+)",rep,text)
如果您有几行要匹配,我建议您编译您的模式。假设它们都遵循接近于此的模式,您可以执行以下操作:
import re
p = re.compile(r"($\d+)\.(\d+)")
lines_before = [
".4 million but not section 4.1",
".6 foo 43.54",
]
lines_after = [p.sub(r",", l) for l in lines_before]
print(lines_after)
输出:
[',4 million but not section 4.1', ',6 foo 43.54']
说明
首先,编译一个正则表达式,匹配任意位置的文字“$”,后跟一位或多位数字,后跟文字“.”,再后跟一位或多位数字。这会捕获“.”前后的部分。
然后,对于每一行,将匹配项替换为捕获组 1,后跟“,”,最后添加第二个捕获组。