我有一个文本文件。我想删除所有小数点及其尾随数字,除非文本在前面。
例如,应将12,29,14.6,8967.334替换为12,14,8967
例如,不应修改happypants2.3@email.com。
我的代码是:
import re
txt1 = "9.9,8.8,22.2,88.7,morris1.43@email.com,chat22.3@email.com,123.6,6.54"
txt1 = re.sub(r',\d+[.]\d+', r'\d+',txt1)
print(txt1)
除非有更简单的方法来完成此操作,否则如何修改r'\ d +',使其仅返回不带小数位的数字?
答案 0 :(得分:2)
您需要在正则表达式中使用组。您将数字放在“。”之前。放入括号,然后您可以使用'\1'
稍后再引用它们:
txt1 = re.sub(r',(\d+)[.]\d+', r',\1',txt1)
请注意,在您尝试输入的替换代码中,您忘记了替换逗号,因此您的数字将被混在一起。但是,这仍然不是完美的。由于第一个数字不是以逗号开头,因此不会被处理。
代替检查逗号,更好的方法是检查单词边界,这可以使用\b
完成。因此解决方案是:
import re
txt1 = "9.9,8.8,22.2,88.7,morris1.43@email.com,chat22.3@email.com,123.6,6.54"
txt1 = re.sub(r'\b(\d+)[.]\d+\b', r'\1',txt1)
print(txt1)
答案 1 :(得分:0)
考虑到这是文件中仅有的两种类型的字符串,您可以显式检查这些条件。
这可能不是一种有效的方法,但是我所做的是拆分str
并检查字符串是否包含@email.com
。如果是这样,那么我只是追加到新列表中。为了满足您的第一个条件,我们可以将str
转换为int
,这将消除小数点。
如果您希望所有内容都返回str变量,则可以使用.join()
。
代码:
txt1 = "9.9,8.8,22.2,88.7,morris1.43@email.com,chat22.3@email.com,123.6,6.54"
txt_list = []
for i in (txt1.split(',')):
if '@email.com' in i:
txt_list.append(i)
else:
txt_list.append(str(int(float(i))))
txt_new = ",".join(txt_list)
txt_new
输出:
'9,8,22,88,morris1.43@email.com,chat22.3@email.com,123,6'