Regex 以下字符串的正则表达式
我正在尝试使用以下规则为ID创建正则表达式:Regex 以下字符串的正则表达式,regex,Regex,我正在尝试使用以下规则为ID创建正则表达式: 以A-Z开头,一次或多次。(主ID,mi) 后面跟着可选的破折号。(分隔符) 后跟0-9,一次或多次。(子ID,si) 后跟可选的破折号或点。(分隔符) 后跟可选的a-z或0-9,一次或多次。(主要类别,mc) 后跟可选的破折号或点。(分隔符) 后跟可选的a-z或0-9,一次或多次。(副类别,sc) 如果ID是字母和数字交替的(A-01a1,A1.A.1),则可以省略分隔符。如果后续部分同时为字母或数字(A-1.1a、A1.2.3、A1a.A),则需
(?P<mi>[A-Z]+)-?(?P<si>[0-9]+)[\-\.]?(?P<mc>[a-z0-9])*[\-\.]?(?P<sc>[a-z0-9])*
(?P[A-Z]+)-?(?P[0-9]+)[\-\.](?P[A-z0-9])*[\-\.]?(?P[A-z0-9])*
以下是我尝试的结果:
ID mi si mc sc
A1 A 1
A001 A 001
AB-01 AB 01
A1aa A 1 a <<<<< mc=aa
A-01a1 A 01 1 <<<<< mc=a sc=1
A-1.1a A 1 a <<<<< mc=1 sc=a
A1.a1 A 1 1 <<<<< mc=a sc=1
A1.a.1 A 1 a 1
A1.2.3 A 1 2 3
A1a.a A 1 a a
ID mi si mc sc
A1 A 1
A001 A 001
AB-01 AB-01
A1aa a1a表达式中的*
应重新定位到捕获组的内部
还可以删除字符大小写内的斜杠
(?P<mi>[A-Z]+)-?(?P<si>[0-9]+)[\-\.]?(?P<mc>[a-z0-9])*[\-\.]?(?P<sc>[a-z0-9])*
^ ^ ^ ^ ^ ^
(?P[A-Z]+)-?(?P[0-9]+)[\-\.](?P[A-z0-9])*[\-\.]?(?P[A-z0-9])*
^ ^ ^ ^ ^ ^
应该是这样的:
(?P<mi>[A-Z]+)-?(?P<si>[0-9]+)[-.]?(?P<mc>[a-z0-9]*)[-.]?(?P<sc>[a-z0-9]*)
(?P[A-Z]+)-?(?P[0-9]+)[-.]?(?P[A-z0-9]*)[-.](?P[A-z0-9]*)
我会用这个:
(?<mi>[A-Z]+)-?(?<si>[0-9]+)[-.]?(?<mc>[a-z0-9]*)[-.]?(?<sc>[a-z0-9]*)
(?[A-Z]+)-(?[0-9]+)[-.](?[A-z0-9]*)[-.](?[A-z0-9]*)
说明
(?您使用的是哪种语言?不同语言中的Regex工具是不同的(尽管这看起来很像PCRE变体).I just use RegEx101.comIt也想知道。开箱即用的PCRE变体似乎已被选中,但您可以单击左侧边缘使其使用JS或Python方言。显然,它还不支持更多的.PCRE(我猜是默认值)。我不知道它的左边有JS和Python变体。我只是打开该站点进行测试。在A-01a1,A-1-aa1上失败似乎只有在列表中失败,但如果它是自己的,则不会失败。A-1-aa1
的aa1
部分应该是主要类别?在这里我修改了(?=[-.\s])
也测试字符串的结尾,因此现在它们看起来像(?=[-.\s]|$)
。