如何用正则匹配仅含一个数字其余为字母或仅含一个字母其余为数字的行
正确写法
只匹配 一个数字、其余为字母 的行:
^[A-Za-z]*[0-9][A-Za-z]*$
只匹配 一个字母、其余为数字 的行:
^[0-9]*[A-Za-z][0-9]*$
如果需要合并成一个正则表达式:
^[A-Za-z]*[0-9][A-Za-z]*$|^[0-9]*[A-Za-z][0-9]*$
说明
原表达式中的:
(?=.*[0-9])(?=.*[a-zA-Z])
只表示“至少包含一个数字”和“至少包含一个字母”,并没有限制数量,因此会匹配所有数字字母混合行。
新表达式直接限定整行结构:
^[A-Za-z]*[0-9][A-Za-z]*$:中间只能出现一个数字,其余位置必须是字母。^[0-9]*[A-Za-z][0-9]*$:中间只能出现一个字母,其余位置必须是数字。
因此匹配结果为:
CRHXPDV2匹配第一种。57342D61匹配第二种。
如果要求字母和数字都必须至少出现一个,可以使用:
^(?=.*[A-Za-z])[A-Za-z]*[0-9][A-Za-z]*$
以及:
^(?=.*[0-9])[0-9]*[A-Za-z][0-9]*$
处理多行文本时,开启多行匹配模式,使 ^ 和 $ 表示每一行的开头和结尾。
内容的提问来源于stack exchange,提问作者here
相关产品推荐
相关产品推荐

