字符串示例:Alerts will be silent from 00:00 to 05:00
。正则表达式必须匹配具有以下格式nn:nn
的任何序列,其中n
是一个数字。没问题,[0-9]{2}:[0-9]{2}
完美无缺。然而,目标是分别识别每个序列00:00
和05:00
。 00:00
和05:00
表示小时数,我需要单独识别它们的原因是因为字符串必须使用相关的小时更新。
以下正则表达式与05:00
匹配:[0-9]{2}:[0-9]{2}$
。但是对于第一个序列00:00
,我能够使其工作的唯一方法是\s[0-9]{1,2}:[0-9]{2}\s
,它匹配00:00
但两端都有空格。当然这不是理想的结果,必须匹配序列而不用空格。
答案 0 :(得分:1)
您的问题似乎可以通过其他方式解决,但您只提供了一些细节。
解决主要问题,主要是:
序列必须在没有空格的情况下匹配
请注意\s[0-9]{1,2}:[0-9]{2}\s
包含\s
作为消费模式的一部分。要检查空格是否存在,您应该使用 lookarounds 或零宽度断言。
(?<=\s)[0-9]{1,2}:[0-9]{2}(?=\s)
这里,(?<=\s)
要求在前1或2位之前存在空格,但它不会消耗此空格。 (?=\s)
正向前瞻要求在尾随1或2位后存在空格,并且也不消耗。
“消耗”是指匹配的子字符串不会成为返回匹配值的一部分。