如何为逗号分隔符列表创建java正则表达式
如何为逗号分隔符列表创建java正则表达式 (三) (3,6) (3、6) 我试过了,但不匹配:如何为逗号分隔符列表创建java正则表达式,java,Java,如何为逗号分隔符列表创建java正则表达式 (三) (3,6) (3、6) 我试过了,但不匹配: Pattern.compile("\\(\\S[,]+\\)") 如何从Matcher类中获取代码中的值“3”或“3”和“6”?Validation regex 为了清晰起见,您可以尝试这种元正则表达式方法: String pattern = "< part (?: , part )* >" .replace("<", "\\("
Pattern.compile("\\(\\S[,]+\\)")
如何从Matcher类中获取代码中的值“3”或“3”和“6”?Validation regex
为了清晰起见,您可以尝试这种元正则表达式方法:
String pattern =
"< part (?: , part )* >"
.replace("<", "\\(")
.replace(">", "\\)")
.replace(" ", "\\s*")
.replace("part", "[^\\s*(,)]++");
System.out.println(pattern);
/*** this is the pattern
\(\s*[^\s*(,)]+\s*(?:\s*,\s*[^\s*(,)]+\s*)*\s*\)
****/
这张照片是:
(1,3,6) = [1, 3, 6]
(x,y!,a+b=c) = [x, y!, a+b=c]
( 1, 3 , 6) = [1, 3, 6]
(1,3,6,) no match
(()) no match
(,) no match
() no match
(oh, my, god) = [oh, my, god]
(oh,,my,,god) no match
([],<>) = [[], <>]
( !! , ?? , ++ ) = [!!, ??, ++]
(1,3,6)=[1,3,6]
(x,y!,a+b=c)=[x,y!,a+b=c]
( 1, 3 , 6) = [1, 3, 6]
(1,3,6,)不匹配
(())没有对手
(,)没有对手
()没有对手
(哦,我的,上帝)=[哦,我的,上帝]
(哦,天哪)没有对手
([],) = [[], ]
( !! , ?? , ++ ) = [!!, ??, ++]
这将使用String.split
在修剪括号后获得所有部分的String[]
。Validation regex
为了清晰起见,您可以尝试这种元正则表达式方法:
String pattern =
"< part (?: , part )* >"
.replace("<", "\\(")
.replace(">", "\\)")
.replace(" ", "\\s*")
.replace("part", "[^\\s*(,)]++");
System.out.println(pattern);
/*** this is the pattern
\(\s*[^\s*(,)]+\s*(?:\s*,\s*[^\s*(,)]+\s*)*\s*\)
****/
这张照片是:
(1,3,6) = [1, 3, 6]
(x,y!,a+b=c) = [x, y!, a+b=c]
( 1, 3 , 6) = [1, 3, 6]
(1,3,6,) no match
(()) no match
(,) no match
() no match
(oh, my, god) = [oh, my, god]
(oh,,my,,god) no match
([],<>) = [[], <>]
( !! , ?? , ++ ) = [!!, ??, ++]
(1,3,6)=[1,3,6]
(x,y!,a+b=c)=[x,y!,a+b=c]
( 1, 3 , 6) = [1, 3, 6]
(1,3,6,)不匹配
(())没有对手
(,)没有对手
()没有对手
(哦,我的,上帝)=[哦,我的,上帝]
(哦,天哪)没有对手
([],) = [[], ]
( !! , ?? , ++ ) = [!!, ??, ++]
这使用
String.split
在修剪括号后获得所有部分的String[]
。我不清楚您的输入到底是什么样子,但我怀疑您使用的模式是否符合您的要求。您的模式将匹配一个文本(
,后跟一个非空白字符,后跟一个或多个逗号,后跟一个文本)
如果要匹配一个数字(可选后跟逗号和另一个数字,所有数字都用括号括起来),可以尝试以下模式:
"\\(\\s*(\\d+)\\s*(,\\d+)?\\s*\\)"
应该匹配(3)
,(3)
,(3,6)
,等等,但不匹配(a)
或(3,a)
您可以使用
Matcher.group
检索匹配的数字;第一个数字将是group1
,第二个(如果有)将是group2
,我不清楚您的输入是什么样子的,但我怀疑您使用的模式是否符合您的要求。您的模式将匹配一个文本(
,后跟一个非空白字符,后跟一个或多个逗号,后跟一个文本)
如果要匹配一个数字(可选后跟逗号和另一个数字,所有数字都用括号括起来),可以尝试以下模式:
"\\(\\s*(\\d+)\\s*(,\\d+)?\\s*\\)"
应该匹配(3)
,(3)
,(3,6)
,等等,但不匹配(a)
或(3,a)
您可以使用
Matcher.group
检索匹配的数字;第一个数字将是组1
,第二个(如果有)将是组2
对不起,你能为我澄清一下-这个列表是如何存储/输入的吗?您是在谈论上面提到的文字字符串:“(3)”或“(3,6)”或“(3,6)”,还是括号仅表示分隔符?如果您能提供Java代码来显示您试图匹配一个示例,这将非常有用。根据这些列表的存储/输入方式,您可以做一些简单得多的事情。对不起,您能为我澄清一下-这个列表是如何存储/输入的吗?您是在谈论上面提到的文字字符串:“(3)”或“(3,6)”或“(3,6)”,还是括号仅表示分隔符?如果您能提供Java代码来显示您试图匹配一个示例,这将非常有用。根据这些列表的存储/输入方式,您可能可以做一些简单得多的事情。我尝试了“\(\\s+(,\\s+*\)”。但是(1,3,6,)应该失败,但它没有。@michael:对不起,我错了。查看最新版本。我理解您所说的“即,一些开始括号,然后是一个部分,然后是零个或多个部分,前面是分隔符,然后是结束括号。”但是在“\([^\\s,]+(,[^\\s,]+)*\”中为什么有3',”?它应该只有1,对吗?@michael:[…]
结构中的逗号是字符类定义的一部分。它是否定的,因为它是[^…]
。总的来说,字符类匹配“除了空格和逗号以外的任何字符”。谢谢。我将正则表达式稍微修改为\([^,]+)(,[^,]+)*\)。但是我怎样才能得到价值呢?例如,如果我的输入是(1,3,6),我想解析出“1”、“3”、“6”。如果我的输入是(1),我想解析出“1”。我试过m.groupCount();,它总是返回“2”我尝试了“\(\\S+(,\\S+*)”。但是(1,3,6,)应该失败,但它没有。@michael:对不起,我错了。查看最新版本。我理解您所说的“即,一些开始括号,然后是一个部分,然后是零个或多个部分,前面是分隔符,然后是结束括号。”但是在“\([^\\s,]+(,[^\\s,]+)*\”中为什么有3',”?它应该只有1,对吗?@michael:[…]
结构中的逗号是字符类定义的一部分。它是否定的,因为它是[^…]
。总的来说,字符类匹配“除了空格和逗号以外的任何字符”。谢谢。我将正则表达式稍微修改为\([^,]+)(,[^,]+)*\)。但是我怎样才能得到价值呢?例如,如果我的输入是(1,3,6),我想解析出“1”、“3”、“6”。如果我的输入是(1),我想解析出“1”。我试过m.groupCount();,它总是给我返回“2”