匹配具有特定条件的字符串中的日期和时间
Match date and time from string with specific conditions
问题:
有一长串文本,需要从中提取日期。但是,该字符串有多个日期,因此必须满足某些条件才能成功。
文中带日期片段的字符串如下:
洛杉矶 12/19/2018 11:39 AM 她
作为一个单元 1/18/2019 8:30 AM 4 1.
使用下面的正则表达式我可以匹配两个日期:
<cfset dates = reMatch("(\d+/\d+/\d+)([^\s]([ ]{1,}))((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))(?=([ ]{1,}))(?=[0-9])", text)>
匹配日期:
2018 年 12 月 19 日 11:39 上午
2019 年 1 月 18 日 8:30 上午
我正在尝试匹配日期和时间后跟一个或多个空格和一个或多个数字(仅限第二个实例),这将丢弃第一个实例并让我在一个快乐的地方。到目前为止,我已经尝试了以下代码,但它丢弃了两个日期,因此正则表达式的最后一块不太正确:
<cfset dates = reMatch("(\d+/\d+/\d+)([^\s]([ ]{1,}))((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))(?=([ ]{1,}))(?=[0-9])", text)>
非常感谢任何帮助!
这部分位于模式 (?=([ ]{1,}))(?=[0-9])
的末尾,这是 2 个单独的断言,其中第一个断言 1 个或多个空格,第二个断言从当前位置直接向右的数字.
那永远不会是真的。
您可以做的是使用单个断言 (?= +\d)
,如果您不需要所有捕获组,则忽略它们以仅通过前瞻获得匹配。
使用不区分大小写的匹配(因为唯一的字符是 a
p
和 m
目前可以以任意组合匹配)
\b\d+/\d+/\d+ +(?:1[0-2]|0?[1-9]):[0-5][0-9] ?[ap]m(?= +\d)
请注意,这是一个广泛匹配 \d+/\d+/\d+
,您也可以使用 at this page.
所示的模式对其进行优化
带有捕获组的版本:
(\d+/\d+/\d+) +((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))(?= +\d)
问题: 有一长串文本,需要从中提取日期。但是,该字符串有多个日期,因此必须满足某些条件才能成功。
文中带日期片段的字符串如下:
洛杉矶 12/19/2018 11:39 AM 她
作为一个单元 1/18/2019 8:30 AM 4 1.
使用下面的正则表达式我可以匹配两个日期:
<cfset dates = reMatch("(\d+/\d+/\d+)([^\s]([ ]{1,}))((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))(?=([ ]{1,}))(?=[0-9])", text)>
匹配日期:
2018 年 12 月 19 日 11:39 上午
2019 年 1 月 18 日 8:30 上午
我正在尝试匹配日期和时间后跟一个或多个空格和一个或多个数字(仅限第二个实例),这将丢弃第一个实例并让我在一个快乐的地方。到目前为止,我已经尝试了以下代码,但它丢弃了两个日期,因此正则表达式的最后一块不太正确:
<cfset dates = reMatch("(\d+/\d+/\d+)([^\s]([ ]{1,}))((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))(?=([ ]{1,}))(?=[0-9])", text)>
非常感谢任何帮助!
这部分位于模式 (?=([ ]{1,}))(?=[0-9])
的末尾,这是 2 个单独的断言,其中第一个断言 1 个或多个空格,第二个断言从当前位置直接向右的数字.
那永远不会是真的。
您可以做的是使用单个断言 (?= +\d)
,如果您不需要所有捕获组,则忽略它们以仅通过前瞻获得匹配。
使用不区分大小写的匹配(因为唯一的字符是 a
p
和 m
目前可以以任意组合匹配)
\b\d+/\d+/\d+ +(?:1[0-2]|0?[1-9]):[0-5][0-9] ?[ap]m(?= +\d)
请注意,这是一个广泛匹配 \d+/\d+/\d+
,您也可以使用 at this page.
带有捕获组的版本:
(\d+/\d+/\d+) +((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))(?= +\d)