我有一个日期时间格式的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 ++或网站,因为它速度更快,而不是任何特定的编程语言。
答案 0 :(得分:1)
尝试此正则表达式:
<% @scale = cookies[:scale] %>
<%= image_tag(@product.image_helper(@product.file, @scale.to_i, 352)) %>
将每个匹配项替换为(<published>\d{4}(?:-\d{2}){2}T)\d{2}(?::\d{2}){2}\.\d{3}([^<]*<\/published>)
,即第1组的内容,后跟\103:00:00.000\2
,然后是第2组的内容。
说明:
03:00:00.000
-匹配(<published>\d{4}(?:-\d{2}){2}T)
,后跟4位数字,再跟<published>
,再跟2位数字,再跟-
,再跟2位数字,再跟字母-
。该子比赛在第1组中被捕获T
-匹配格式为\d{2}(?::\d{2}){2}\.\d{3}
的时间,其中XX:XX:XX.XXX
是一个数字。X
-匹配0+次出现的不是([^<]*<\/published>)
后跟<
的任何字符。此子匹配项在第2组中捕获。答案 1 :(得分: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
语法进行反向引用)。