使用Python中的正则表达式更改文件中字符串的一部分

时间:2015-05-21 08:59:21

标签: python regex

我有一个文件,其中每行包含一个时间戳作为该行的一部分。时间戳格式为1996-07-04 00:00:00.0。我希望将其转换为1996-07-04 00:00:00,每行没有毫秒。我尝试在pyhton中使用re.sub()方法,但它用我给出的值替换它,并且不保留原始时间戳。 我正在使用

re.sub("(\d\d\d\d-\d\d-\d\d\s+\d\d:\d\d:\d\d.\d)", "replace without millisec", cell)

第二个参数是我的问题。

1 个答案:

答案 0 :(得分:4)

您可以使用以下正则表达式捕获您需要保留的内容,然后使用反向引用在子替换后恢复它:

\b(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\.\d+\b

替换为\1

请参阅demo

IDEONE代码:

import re
p = re.compile(r'\b(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\.\d+\b')
test_str = u"1996-07-04 00:00:00.0"
print re.sub(p, r"\1", test_str)

请注意,您不必重复相同的子模式,例如\d\d\d\d,只需使用limiting quantifier {n},其中n是您需要子模式的次数重复。您甚至可以设置最小和最大边界,例如{1,4},或仅设置最小{2,}