我需要一个正则表达式,它允许单个字母或逗号分隔的数字,如1,2,3或A,B,C和单个字母或数字,如A C 1 2。它不应该允许123 abc或ABC。我试过^(?:([A-Z0-9a-z])(?!.?\1),)[A-Z0-9a-z]$,但它不工作。
1,2,3
A,B,C
A C 1 2
123 abc
ABC
^(?:([A-Z0-9a-z])(?!.?\1),)[A-Z0-9a-z]$
wlzqhblo1#
您可以使用以下命令:^(?:[A-Za-z0-9](?:[ ,]|$))*$它匹配字母或数字后跟空格或逗号或重复任意次数的字符串结尾。在regex101上演示。
^(?:[A-Za-z0-9](?:[ ,]|$))*$
iqih9akk2#
我认为这是可行的。我保留了^和$,以便与您的示例保持一致。我对您的问题的最佳理解使我得出以下具体要求-这是我相信您正在获得的,但如果不是,那么我们需要更清楚地了解问题设置和上下文:1.当逗号是分隔符时,您在示例中专门使用了全数字或全字母。然而,当空格是分隔符时,您使用了字母和数字的混合。1.我认为这是一种有意的沟通,因此这导致了一个要求,即IF分隔符是逗号,那么整个字符串中只允许一种类型的主字符-所有字母或所有数字。1.而如果分隔符是空格,则允许字母和数字的混合1.因此,这种需求需要多个模式,并使用一个垂直线“or”操作符^([A-Za-z](,[A-Za-z])*)|([0-9](,[0-9])*)|([A-Z0-9a-z]( [A-Z0-9a-z])*)$这里有3个主要部分,由竖线操作符分隔。用简单的语言可以表示为:1.整个字符串可以是一个或多个字母字符,由单逗号或1.整个字符串可以是一个或多个数字,由单逗号或1.整个字符串可以是一个或多个字母或数字,由单个空格字符分隔(所有字母,所有数字和混合都是允许的)。
^([A-Za-z](,[A-Za-z])*)|([0-9](,[0-9])*)|([A-Z0-9a-z]( [A-Z0-9a-z])*)$
ivqmmu1c3#
如果你不想混合使用空格和逗号(所以1 2,3A C 1,2是无效的),你可以使用一个带有反向引用的捕获组:
1 2,3
A C 1,2
^[A-Za-z0-9](?:([ ,])[A-Za-z0-9](?:\1[A-Za-z0-9])*)?$
说明
^
[A-Za-z0-9]
(?:
([ ,])
,
(?:\1[A-Za-z0-9])*
)?
$
Regex demo
3条答案
按热度按时间wlzqhblo1#
您可以使用以下命令:
^(?:[A-Za-z0-9](?:[ ,]|$))*$
它匹配字母或数字后跟空格或逗号或重复任意次数的字符串结尾。
在regex101上演示。
iqih9akk2#
我认为这是可行的。我保留了^和$,以便与您的示例保持一致。我对您的问题的最佳理解使我得出以下具体要求-这是我相信您正在获得的,但如果不是,那么我们需要更清楚地了解问题设置和上下文:
1.当逗号是分隔符时,您在示例中专门使用了全数字或全字母。然而,当空格是分隔符时,您使用了字母和数字的混合。
1.我认为这是一种有意的沟通,因此这导致了一个要求,即IF分隔符是逗号,那么整个字符串中只允许一种类型的主字符-所有字母或所有数字。
1.而如果分隔符是空格,则允许字母和数字的混合
1.因此,这种需求需要多个模式,并使用一个垂直线“or”操作符
^([A-Za-z](,[A-Za-z])*)|([0-9](,[0-9])*)|([A-Z0-9a-z]( [A-Z0-9a-z])*)$
这里有3个主要部分,由竖线操作符分隔。用简单的语言可以表示为:
1.整个字符串可以是一个或多个字母字符,由单逗号或
1.整个字符串可以是一个或多个数字,由单逗号或
1.整个字符串可以是一个或多个字母或数字,由单个空格字符分隔(所有字母,所有数字和混合都是允许的)。
ivqmmu1c3#
如果你不想混合使用空格和逗号(所以
1 2,3
A C 1,2
是无效的),你可以使用一个带有反向引用的捕获组:说明
^
字符串开头[A-Za-z0-9]
匹配单个字符[A-Za-z 0 -9](?:
非捕获组([ ,])
捕获组1,匹配空格或,
[A-Za-z0-9]
匹配单个字符[A-Za-z 0 -9](?:\1[A-Za-z0-9])*
可选地重复匹配组1中捕获的内容,后跟单个字符[A-Za-z 0 -9])?
关闭捕获组上的外层并使其可选$
字符串结束Regex demo