我的任务是存在一个问题,其中有一个特定的表列,其中始终具有相同类型的数据。出于验证目的,我认为根据模式匹配来验证数据是最容易的。
示例数据集:
*12 days ago
*1 minutes ago
*5.8 hours ago
*3.2 years ago
(忽略*) 这是我提出的正则表达式,但我觉得它有点偏离:
String f = "^(?:\\d+|\\d*\\.\\d+)\\s+(\\byears|months|days|hours|minutes\\b)\\s+ (\\bago\\b)$";
Pattern p = p.compile(f);
Matcher m;
if (m.find(retreiveRow(5))) { ...... }
任何帮助都会很棒! 非常感谢!
答案 0 :(得分:1)
as java string:"^\\d+(\\.\\d+)?\\u0020(days|minutes|months|hours|years)\\u0020ago$"
作为普通正则表达式:^\d+(\.\d+)?\u0020(days|minuits|hours|years)\u0020ago$
答案 1 :(得分:1)
您的样本数据:
12 days ago
1 minutes ago
5.8 hours ago
3.2 years ago
我的正则表达式:
/^([\d]+(?:\.\d)?)\s(years|months|days|hours|minutes)/
(..............) (...............................)
<强>解释强>
^([\d]+ # match one or more digits
(?:\.\d)?) # followed by an optional period and digit
\s # followed by a whitespace character
(years|months|days|hours|minutes) # followed by a unit-of-time word
正则表达式下方的两对括号显示正则表达式中包含两个捕获组(反向引用)。
虽然您的问题与 Java 有关,但这是使用 Perl 对您的数据进行此正则表达式的live demo。 Perl代码也在这里供参考:
#!/usr/bin/perl -w
use strict;
use warnings;
my @buf;
while (<DATA>) {
@buf = /^([\d]+(?:\.\d)?)\s(years|months|days|hours|minutes)/;
print "[", join("][", @buf), "]\n";
}
__DATA__
12 days ago
1 minutes ago
5.8 hours ago
3.2 years ago
<强>输出:强>
[12][days]
[1][minutes]
[5.8][hours]
[3.2][years]