我想将字符串中的时间(10.00)与日期和时间(“21.01.08 10.00”)相匹配。我正在使用以下正则表达式:

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}\\b" "g");

但这与21.01.08和10.00匹配21.01。

我正在使用PCRE作为我的regualar表达引擎。

更新

对不起,我应该更清楚了。数据和时间是更大字符串的一部分。我想从该字符串中提取时间。

例如:

“从2010年1月21日开始,将在图书馆举行派对” “21.08.08 - 10:00将举行派对” “在21.08.08你准备好......。 ......将从10.00开始

这可能吗?

有帮助吗?

解决方案

您的原始正则表达式无法正常工作,因为 \ b (字边界)与“。”匹配。在“21.01.08。”中。您需要更加健壮地编码边界:

(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])

使用您使用的任何一种符号捕获时间,同时排除日期。请注意,它不会验证时间。例如,它将匹配“88:99”。验证时间是可能的,但显着地使模式复杂化,并且在大多数情况下可能过度。

使用后视而不是非捕获分组会很好,但PCRE不支持可变宽度的后视。

其他提示

^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$

应该将时间部分放入捕获组中。

“新RegExp”我不确定(Java也许?)。在Perl中你可以得到像......这样的值。

if ("21.01.08 10.00" =~ m/^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$/g) {
  $time_part = $1;
}

在.NET中,以下内容应该有效......

  Regex r = new Regex(@"^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})<*>quot;);
  string dateTimeString = "21.01.08 10.00";
  if (r.IsMatch(dateTimeString)) {
    string timePart = r.Match(dateTimeString).Groups[1].Value;
    Console.Write(timePart);
  }
  Console.ReadKey();

如果你想使用不那么模棱两可的东西,你也可以使用命名捕获然后将索引导入捕获组。

尝试使用

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}<*>quot; "g");

$表示字符串结尾

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top