我使用以下正则表达式来解析文本并找到第一次或时间 Span :

(([0-9] | 0 [0-9] | 1 [0-9] | 2 [0-3])(|)( - | bis)(|))?([0-9] | 0 [0-9] | 1 [0-9] | 2 [0-3])((:| \ . )| Uhr | Uhr)

如果我有一个包含“ 18:00 - 19:00 ”的文本,则会在开始和结束时间找到两个匹配项 .

但在以下情况下它会失败:

28.11.2018 - 19:00

本文中的第一次也是唯一一次是 19:00 ,但正文中的正则表达式"sees" 18 - 19:00 错误地将年份解释为时间 Span 的第一部分 .

你会如何修改正则表达式,以便忽略年份?

Here some more context:

我有一个活动日历,里面有很多条目:

a)“DJ Max射击派对,今天晚上11点 . 不要错过!” b)“展览开幕日”Bourgeois“,今天下午6:00 - 晚上8:00在Alpha画廊举行 . ”

要自动生成所有事件的每日时间表,需要在文本中首次出现时间或时间 Span .

所以这是......

a)下午11:00,b)下午6:00 - 晚上8:00

由于此活动日历位于德国,我们以下列方式编写本地化时间格式 .

晚上11点我们写了......

“23:00”或“23 Uhr”或“23:00 Uhr”

并且在Gemany中可以用以下方式表达时间 Span :

“18-20 Uhr”或“18:00 - 19:00”或18 bis 19 Uhr“等等......

但是,如果a)单次出现一次匹配正则表达式,并且在时间 Span 的情况下,将有两个匹配(开始和结束时间) . 如果时间匹配,则很容易提取小时和分钟 .

到目前为止,正则表达式几乎适用于所有情况,并提取时间和时间戳 . 但在一个案例中,正则表达式失败了:

如果您有例如找到这个时间的日期“18:00”(= 6pm) .

但有时日期会以日期开头,你有类似“11.12.2018 - 19:00”(意思是2018/12/11的下午6点) . 匹配器将年份的“18”视为开始时间,将19:00视为结束时间 . 所以它被误解为“18-19:00”(下午6点到7点)而不是19点(晚上7点) .

我想要的是对正则表达式的修改,而忽略了2018年的“18” .