很抱歉,如果标题不够具有描述性。 如果特定格式的序列出现一次或多次,我希望能够提取到组中。
这是我目前的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正则表达让我头疼。
答案 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})*)/