[英]regular expressions for floating and non-floating point numbers followed by words
我的任務是有一個特定的表列,該列中始終具有相同類型的數據。 為了進行驗證,我認為基於模式匹配來驗證數據是最容易的。
示例數據集:
*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))) { ...... }
任何幫助將是巨大的! 非常感謝!
作為java字符串: "^\\\\d+(\\\\.\\\\d+)?\\\ (days|minutes|months|hours|years)\\\ ago$"
作為^\\d+(\\.\\d+)?\ (days|minuits|hours|years)\ ago$
則表達式: ^\\d+(\\.\\d+)?\ (days|minuits|hours|years)\ ago$
我故意將空格限制為僅空格字符。 似乎沒有選項卡,所有適用於此處。
您的樣本數據:
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針對您的數據進行此正則表達式的實時演示 。 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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.