Python:在字符串中查找序列

时间:2014-09-27 09:44:40

标签: python string

我一直在想如何从python中的字符串中提取所有字母数字非同质序列,以及是否可以在不使用正则表达式的情况下进行良好的样式。

在字母数字非同质序列下,我指的是所有序列,如 aA a1 A1 等等......(没有标点符号,只有上/下套接字母和数字。

2 个答案:

答案 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()