Python正则表达式,用于删除字母数字字符,而不删除字符串末尾的单词
我试图通过删除字符串末尾的字母数字字符来清除一些文本,但我也删除了正常的单词,如输出所示。有人能帮我达到预期的结果吗Python正则表达式,用于删除字母数字字符,而不删除字符串末尾的单词,python,regex,Python,Regex,我试图通过删除字符串末尾的字母数字字符来清除一些文本,但我也删除了正常的单词,如输出所示。有人能帮我达到预期的结果吗 re.sub(r'[a-zA-Z0-9/]{5,}$', '', text) asus zenfone 3s max zc521tl asus zenfone max plus (m1) zb570tl asus zenfone max pro (m1) zb601kl/zb602k nokia 3.1 c nokia 3 asus zenfone 3 zoom ze553k
re.sub(r'[a-zA-Z0-9/]{5,}$', '', text)
asus zenfone 3s max zc521tl
asus zenfone max plus (m1) zb570tl
asus zenfone max pro (m1) zb601kl/zb602k
nokia 3.1 c
nokia 3
asus zenfone 3 zoom ze553k
asus zenfone 3 deluxe zs570kl
blackberry keyone
htc explorer
lg tribute
acer liquid z520
输出:
asus zenfone 3s max
asus zenfone max plus (m1)
asus zenfone max pro (m1)
nokia 3.1 c
nokia 3
asus zenfone 3 zoom
asus zenfone 3 deluxe
blackberry
htc
lg
acer liquid z520
asus zenfone 3s max
asus zenfone max plus (m1)
asus zenfone max pro (m1)
nokia 3.1 c
nokia 3
asus zenfone 3 zoom
asus zenfone 3 deluxe
**blackberry keyone**
**htc explorer**
**lg tribute**
acer liquid z520
预期输出:
asus zenfone 3s max
asus zenfone max plus (m1)
asus zenfone max pro (m1)
nokia 3.1 c
nokia 3
asus zenfone 3 zoom
asus zenfone 3 deluxe
blackberry
htc
lg
acer liquid z520
asus zenfone 3s max
asus zenfone max plus (m1)
asus zenfone max pro (m1)
nokia 3.1 c
nokia 3
asus zenfone 3 zoom
asus zenfone 3 deluxe
**blackberry keyone**
**htc explorer**
**lg tribute**
acer liquid z520
您可以向正则表达式添加一个正向前瞻,该正则表达式要求末尾的单词至少包含一个要删除的数字:
(?=\D*\D)
。这将阻止它删除不包含数字的普通单词
完整的程序:
#!/usr/bin/env python3
import re
texts = [
'asus zenfone 3s max zc521tl',
'asus zenfone max plus (m1) zb570tl',
'asus zenfone max pro (m1) zb601kl/zb602k',
'nokia 3.1 c',
'nokia 3',
'asus zenfone 3 zoom ze553k',
'asus zenfone 3 deluxe zs570kl',
'blackberry keyone',
'htc explorer',
'lg tribute',
'acer liquid z520',
]
for text in texts:
print(re.sub(r'(?=\D*\d)[a-zA-Z0-9/]{5,}$', '', text))
它输出:
asus zenfone 3s max
asus zenfone max plus (m1)
asus zenfone max pro (m1)
nokia 3.1 c
nokia 3
asus zenfone 3 zoom
asus zenfone 3 deluxe
blackberry keyone
htc explorer
lg tribute
acer liquid z520
如果它应该是字符串中的最后一个单词,并且总是有多个单词,则可以使用:
[ \t]+(?=[a-zA-Z0-9/]{5})[a-zA-Z/]*[0-9][a-zA-Z0-9/]*[A-Za-z]$
匹配1+个空格或制表符[\t]+
断言至少5个所列字符(?=[a-zA-Z0-9/]{5})
匹配所列任何一项的0+倍[a-zA-Z/]*
匹配一个数字[0-9]
匹配字符类中列出的任何字符的0+倍[a-zA-Z0-9/]*
匹配字符A-Za-z[A-Za-z]
字符串结尾$
替换时使用空字符串。为什么宏碁液体z520中的
z520
没有被移除?不需要移除