怎样提取只有大小写字母与数字混合的8位字符串

8位字符,仅支持字母大小写和数字三种混合
字母数字位置不定,大小写不定,字符长度是8位,数字不超过4个,
同时,还不能是纯数字,纯字母组成.怎样写正则表达式?

下面是样例文本:
3snkagj5
linwailin
Lolylh00
eyqts4ug
gdchenbin5
840516cb
68686868
hmupvgp8
wangdong123
6god8m2y
tiayulong
124548277
Luxibing
whgr7dmw
97y3jf0w
npmjp96h
ne7ja%5m
gh9bydrw
cesx444442
321456987
200019zph
2616831024
Windowsme
dadaxing@
Panfeng999
Mnbvcxz1
Zl506a90
197254999
zw105zw105
Ay105105
hnsysdldh
aiolos2005
Jlingsoul
Eckingsoul
marioas110
longxiaoge
Songsong
h3gazxuv
df_feeling
Df825138
helongxiang
9887421810
liqiwwww
4md3lmwg
wangxin5433
Gg790304
lingxue00
800318052
nlgs6wue
pzD3taUc
cc8691215
jsjjcaizhong
198212123
huangbangmian
802825829
wisely2001
qweqw123478
123123ww
5CYL8EMZ
huanghaoyi2000
wangyan658
Hujiaying520
jeffdong0303
xusheng223

提取成功后:
Lolylh00
Mnbvcxz1
3snkagj5
eyqts4ug
hmupvgp8
6god8m2y
whgr7dmw
97y3jf0w
npmjp96h
ne7ja%5m
gh9bydrw
h3gazxuv
4md3lmwg
nlgs6wue
pzD3taUc
5CYL8EMZ

求正则表达式

直接通过正则表达式判断数字的个数不多于4个,我也不知道怎么办。但是可以考虑把这个条件单独判断,
先选择符合其他条件的所有行,然后通过shell筛选数字个数符合条件的行。


grep -Po '^(?!\d+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{8}$' a.txt | while read line; do num=`echo $line | grep -Po "\d{1}" | wc -l`; if (( $num < 5 )); then echo $line; fi ; done;

你的结果里面多了个带%的行,不知道是笔误还是怎样

上網找到的,原文有 ”特殊符號“,這裡沒有放入:

^.*((?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)).*$

^.*              : Start
(?=.{8,})        : Length
(?=.*[a-zA-Z])   : Letters
(?=.*\d)         : Digits
.*$              : End

/^(?=.[0-9])(?=.[a-zA-Z])(.{8})$/

^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{8}$