正则表达式替换日期时间格式之间的时间值

问题描述 投票:-1回答:2

我有一个日期时间格式的XML文件,如下所示:

<published>2019-01-03T23:54:00.000+10:00</published>

还有这个

<published>2019-01-07T14:22:00.001+10:00</published>

依此类推,时间价值为23:54:00.000和14:22:00.001。

如何用正则表达式替换time标签之间的<published></published>值?例如,我想用03:00:00.000替换两个时间值,因此第一个例子变为

<published>2019-01-03T03:00:00.000+10:00</published>

我的目标是使用任何现有的工具/应用程序Notepad ++或网站,因为它更快,而不是任何特定的编程语言。

regex regular-language
2个回答
1
投票

首先,强制警告不要尝试用正则表达式解析xml / html。如果这是一次性重新格式化任务并且您可以控制数据,那就没问题了。正则表达式解决方案不会非常强大......

除此之外,您将需要一个可以使用正则表达式处理捕获组的工具,因此您可以匹配整个published标记并避免误报。像这样的正则表达式可能会起作用(根据您的工具调整捕获分组):

(\<published\>\d\d\d\d-\d\d-\d\dT)\d\d:\d\d:\d\d\.\d\d\d(\+\d\d:\d\d\<\/published\>)

请注意,以上是PCRE格式的正则表达式 - demo on regex101。您可能需要调整以适应工具使用的格式。

在此正则表达式中,有两个捕获组,一个在您想要替换之前,一个在您想要替换之后。您可以在所选工具的替换字段中使用的示例字符串是:\103:00:00.000\2(使用\1语法进行反向引用)。


1
投票

试试这个正则表达式:

(<published>\d{4}(?:-\d{2}){2}T)\d{2}(?::\d{2}){2}\.\d{3}([^<]*<\/published>)

Click for Demo

\103:00:00.000\2替换每个匹配,即第1组内容,然后是03:00:00.000,然后是第2组内容。

说明:

  • (<published>\d{4}(?:-\d{2}){2}T) - 匹配<published>,然后是4位数字,接着是-,接着是2位数字,接着是-,接着是2位数字,接着是字母T。该子匹配在第1组中捕获
  • \d{2}(?::\d{2}){2}\.\d{3} - 匹配格式XX:XX:XX.XXX的时间,其中X是一个数字。
  • ([^<]*<\/published>) - 匹配任何不是<,然后是</published>的任何字符的出现次数。该子匹配在第2组中捕获。

替换之前:enter image description here

替换后:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.