我正在尝试创建一个匹配字符串的正则表达式:
63PDH XX1PF HX11F
哪里有数字和数字。不能只匹配数字或字母,必须像上面那样5。
我通过一些研究做了以下表达,但我无法与5匹配:
([A-Z]*([0-9]+[A-Z]+))
我需要这样的东西:
匹配任何有字母和数字的5个字符序列。
([A-Z]*([0-9]+[A-Z]+)){5}
任何人都知道如何继续?
答案 0 :(得分:3)
假设规则是
然后我会用三个预测写三个检查:
^ # start of string (?=[0-9A-Z]{5}$) # contains 5 characters in 0-9 and A-Z before the end of the string (?=.*?[0-9]) # contains at least one 0-9 anywhere (?=.*?[A-Z]) # contains at least one A-Z anywhere .* # actual match
“实际匹配”可以是.*
,因为所有其他规则都可以通过预见条件得到满足。但是.*
必须在那里,因为预测本身不会消耗任何字符。
在一行
^(?=[0-9A-Z]{5}$)(?=.*?[0-9])(?=.*?[A-Z]).*
要在多行输入上成功使用正则表达式,您需要启用多行标记,以便^
和$
将其含义更改为“line-start”和“line-line”结束“而不是”string-start“和”string-end“。
答案 1 :(得分:1)
我认为没有好的答案。
因为它检查的情况非常多。
我认为您应该使用2个正则表达式进行检查:
第一个正则表达式检查5个字符(数字或字母)。
第二个正则表达式检查5个数字或5个字母(并忽略它)。
答案 2 :(得分:0)
答案 3 :(得分:0)
使用否定lookahead检查字符串的另一个想法不仅包含digits (?!\d*$)
或仅包含非数字(?!\D*$)
并定义允许的字符[A-Z\d]{5}
。
^(?!\d*$|\D*$)[A-Z\d]{5}$
答案 4 :(得分:0)
另一种方法是使用条件
^(?:(\d)|([A-Z])|[\dA-Z]){5}$(?(1)(?:(?(2)|(?!)))|(?!))