我想将字符串中的时间(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年10月21日开始,派对将在图书馆举行” “21.08.08 - 10:00将举行派对” “在2008年8月21日,你将被安排...... ......将从10.00开始”
这可能吗?
答案 0 :(得分:4)
您的原始正则表达式无效,因为\b
(字边界)与“。”匹配。在“21.01.08。”您需要更加健壮地编码边界:
(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])
使用您使用的任何一种符号捕获时间,同时排除日期。请注意,它不会验证时间。例如,它将匹配“88:99”验证时间是可能的,但显着地使模式复杂化,并且在大多数情况下可能过度。
使用后视而不是非捕获分组会很好,但PCRE不支持可变宽度的后视。
答案 1 :(得分:1)
^\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})$");
string dateTimeString = "21.01.08 10.00";
if (r.IsMatch(dateTimeString)) {
string timePart = r.Match(dateTimeString).Groups[1].Value;
Console.Write(timePart);
}
Console.ReadKey();
如果你想使用比索引更不明确的东西,你也可以使用Named Capture。
答案 2 :(得分:0)
尝试使用
new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}$" "g");
$表示字符串结尾