一、必须包含字母或数字的正则
>>>re.search(r'[0-9a-zA-Z]+','abc9800H')
二、必须包含字母且数字的正则
这个正则拆分来看
理解一个规则:后向否定:
a(?!xxxx) 即a后面不是xxxx才能匹配到
^(?!xxxx) 即开后不能是xxxx才能匹配
1、不能全是字母怎么写
>>> re.search(r'^(?![a-zA-Z]+$)[0-9a-zA-Z]+','22jj55')
<_sre.SRE_Match object; span=(0, 6), match='22jj55'>
>>> re.search(r'^(?![a-zA-Z]+$)[0-9a-zA-Z]+','jjj2255hfh')
<_sre.SRE_Match object; span=(0, 10), match='jjj2255hfh'>
>>> re.search(r'^(?![a-zA-Z]+$)[0-9a-zA-Z]+','2255hfh')
<_sre.SRE_Match object; span=(0, 7), match='2255hfh'>
2、不能全是数字怎么写
>>> re.search(r'^(?![0-9]+$)[0-9a-zA-Z]+','22jj55')
<_sre.SRE_Match object; span=(0, 6), match='22jj55'>
>>> re.search(r'^(?![0-9]+$)[0-9a-zA-Z]+','jjj2255hfh')
<_sre.SRE_Match object; span=(0, 10), match='jjj2255hfh'>
>>> re.search(r'^(?![0-9]+$)[0-9a-zA-Z]+','2255hfh')
<_sre.SRE_Match object; span=(0, 7), match='2255hfh'>
3、不能全是字母或数字怎么写
>>> re.search(r'^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]+','22jj55')
<_sre.SRE_Match object; span=(0, 6), match='22jj55'>
三、一个疑问,为什么必须加$
1、如果没有$符号,[0-9]+连续全是数字,开头^限制,开头不能是数字就可以了,其余不做限制
>>> re.search(r'^(?![0-9]+)[0-9a-zA-Z]+','22jj55')
>>> re.search(r'^(?![0-9]+)[0-9a-zA-Z]+','jj55')
<_sre.SRE_Match object; span=(0, 4), match='jj55'>
>>> re.search(r'^(?![0-9]+)[0-9a-zA-Z]+','jj')
<_sre.SRE_Match object; span=(0, 2), match='jj'>
2、如果有KaTeX parse error: Expected group after '^' at position 35: …不符合连续数字的结果集,再加上^̲限制,则不能匹配从头到尾连续多个数字,即不能全是数字
>>> re.search(r'^(?![0-9]+$)[0-9a-zA-Z]+','22jj55')
<_sre.SRE_Match object; span=(0, 6), match='22jj55'>
>>> re.search(r'^(?![0-9]+$)[0-9a-zA-Z]+','jjj2255hfh')
<_sre.SRE_Match object; span=(0, 10), match='jjj2255hfh'>
>>> re.search(r'^(?![0-9]+$)[0-9a-zA-Z]+','2255hfh')
<_sre.SRE_Match object; span=(0, 7), match='2255hfh'>
待解决疑问:为什么不是开头不能是数字,结尾不能是数字??