REGEX模式创建

chhqkbe1  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(121)

我需要一个正则表达式,它允许单个字母或逗号分隔的数字,如1,2,3A,B,C和单个字母或数字,如A C 1 2。它不应该允许123 abcABC
我试过^(?:([A-Z0-9a-z])(?!.?\1),)[A-Z0-9a-z]$,但它不工作。

wlzqhblo

wlzqhblo1#

您可以使用以下命令:^(?:[A-Za-z0-9](?:[ ,]|$))*$
它匹配字母或数字后跟空格或逗号或重复任意次数的字符串结尾。
regex101上演示。

iqih9akk

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.整个字符串可以是一个或多个字母或数字,由单个空格字符分隔(所有字母,所有数字和混合都是允许的)。

ivqmmu1c

ivqmmu1c3#

如果你不想混合使用空格和逗号(所以1 2,3A C 1,2是无效的),你可以使用一个带有反向引用的捕获组:

^[A-Za-z0-9](?:([ ,])[A-Za-z0-9](?:\1[A-Za-z0-9])*)?$

说明

  • ^字符串开头
  • [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

相关问题