标记字符串
我得到了一个字符串,格式如下:yyyyMMdd_HHmm_ss_unitCode_(status)。 我需要将每个组件映射到一个专用类的属性。标记字符串
我想用这样的正则表达式来定义我的令牌: {d+}4{d+}2{d+}2_{d+}2_{d+}2_{s+}3_{s+}2
=>为近似正则表达式语法表示歉意,d表示十进制,s表示字符串。
如何告诉我的解析器第一组{d+}4
必须在我的课程的“年”属性中,第二组到“月”等等。
显然,我可以这样做:token.setYear(substring(0,4))
但我想要更通用一些,因为我没有控制文件名的结构。 我还考虑定义一个xml结构,用startPosition,endPosition,属性名称来存储和输入。
总而言之,我认为所有这些太复杂了。问题是我没有一个单独的分隔符来使我能够使用String.split
。
String input; // yyyyMMdd_HHmm_ss_unitCode_(status)
SpecialClass output;
String regex = "(\\d{4})(\\d{2})(\\d{2})_(\\d{2})(\\d{2})_(\\d{2})_([^_]+)_\\((.+)\\)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if (m.matches())
{
output.year = m.group(1);
output.month = m.group(2);
// etc
}
例输入:
String input = "20120113_1234_27_500_(33)";
将产生以下组:
Group 1: 2012 //year
Group 2: 01 //month
Group 3: 13 //day
Group 4: 12 //hour
Group 5: 34 //minute
Group 6: 27 //second
Group 7: 500 //unitcode
Group 8: 33 //status
适当调整你的正则表达式,取决于你想允许多少变异。 – theglauber 2012-01-12 17:29:57
这个非常好!这正是我需要的! – 2012-01-12 18:03:17
我认为所有'\ d'都需要'\\ d'以及'\('和什么是'([^)+)'最后应该做什么? – 2012-01-12 19:44:27
您解析字符串,你打算使用正则表达式,但是你不知道字符串的结构?这真是令人困惑。如果你不知道字符串的结构,我不知道你如何解析它。 – 2012-01-12 17:21:40
好问题。有一件事我没有得到:“我无法控制文件名的结构”。所以字符串是一个文件名? – paislee 2012-01-12 17:29:12
我知道结构可以改变,这就是为什么我想通过正则表达式来定义它,以便能够在结构改变时适应我的代码。 – 2012-01-12 18:02:34