Java RegEx检查一个或多个格式化字符串

时间:2010-12-14 21:28:36

标签: java regex

很抱歉,如果标题不够具有描述性。 如果特定格式的序列出现一次或多次,我希望能够提取到组中。

这是我目前的REGEX-> (为清晰起见,删除了重复的斜杠)

:([AZ \ d] {3} - [AZ \ d] {5} - [AZ \ d] {2})(:(?)[AZ \ d] { 3} - [AZ \ d] {5} - [AZ \ d] {2})

我知道我很亲密,但并不完全在那里。

所以这些都是有效的

TEST1:001-12345-67:ABC-DEFGH-IJ

TEST1,001-12345-67,:ABC-DEFGH-IJ (逗号分开的小组)返回

WHATEVER:123-12345-12:987-98765-98:ASD-ASDFA-AS (当前正则表达式不起作用)

WHATEVER,123-12345-12,:987-98765-98:ASD-ASDFA-AS

返回

这些不是

TEST1:001-12345-67

WHATEVER:123-12345-12:HMMMM

这就像我需要用'。'做一个括号。对于整个第二序列。感谢大家的沉思。 PS正则表达让我头疼。

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

/(.*?(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}){2,})/

然后将捕获的文本拆分为“:”以获取单独的块。

编辑:等等,你只需要三个块,无论有多少组?这很简单。你可以通过调用split(':', 3)(而不仅仅是split(':')来获得上述结果,或者去寻找正则表达式解决方案:

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})((?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})+)/

(第三组将以你不想要的额外“:”开头,如果你不介意对模式进行更多膨胀,可以删除它:)

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})*)/