我一直在想如何从python中的字符串中提取所有字母数字非同质序列,以及是否可以在不使用正则表达式的情况下进行良好的样式。
在字母数字非同质序列下,我指的是所有序列,如 aA a1 A1 等等......(没有标点符号,只有上/下套接字母和数字。
答案 0 :(得分:3)
使用str.isalnum
:
>>> 'F'.isalnum()
True
>>> '7'.isalnum()
True
>>> ','.isalnum()
False
使用list comprehension / generator expression:
>>> [c for c in 'ab,cd"12"EF' if c.isalnum()]
['a', 'b', 'c', 'd', '1', '2', 'E', 'F']
>>> ''.join(c for c in 'ab,cd"12"EF' if c.isalnum())
'abcd12EF'
或使用未绑定方法的filter
:
>>> filter(str.isalnum, 'ab,cd"12"EF')
'abcd12EF'
<强>更新强>
如果您不想要字符,但需要一系列字符,则可以使用itertools.groupby
:
>>> import itertools
>>> [''.join(grp) for yes, grp in itertools.groupby('ab,cd"12"EF', key=str.isalnum) if yes]
['ab', 'cd', '12', 'EF']
答案 1 :(得分:1)
使用re
:
import re
re.findall("[a-zA-Z0-9]+", "hello there1 A2... bl3h")
#>>> ['hello', 'there1', 'A2', 'bl3h']
不多。
如果你想要任何Unicode数字或字符,你可以使用即将推出的regex
模块:
import regex
regex.findall("[[:alnum:]]+", "hello_there1 A2... bl3h")
#>>> ['hello', 'there1', 'A2', 'bl3h']
这应该给iff thing.isalnum()
。