【问题标题】:Change part of string in a file using regex in Python在 Python 中使用正则表达式更改文件中的部分字符串
【发布时间】:2023-04-09 07:04:01
【问题描述】:

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

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

第二个参数是我的问题。

【问题讨论】:

  • 发布你的尝试..
  • 如果时间戳是字符串,你可以不切片[:-2]吗?
  • 基本上,如果您不提供错误的正则表达式,没有人将无法帮助您...
  • 致所有人:对不起,我在阅读您的 cmets 之前发布了一个答案。现在太忙了:)

标签: python regex


【解决方案1】:

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

\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,}

【讨论】:

  • 谢谢!这行得通。你能说出 r"\1" 是做什么的吗?我是 python 新手。
  • 请查看官方re.sub documentation:是对第一个捕获组(第一组圆括号内的子模式)捕获的文本的反向引用。你甚至可以使用\g<1> 而不仅仅是\1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2018-10-06
  • 1970-01-01
相关资源
最近更新 更多