在字符串中查找字母,后面没有数字......可能使用RE?

时间:2014-02-11 17:44:57

标签: python regex string

我正在尝试从字符串中提取字母,这些字母不跟随,或者不直接跟随数字。

这是一个示例字符串:

string = "ts0060_LOD-70234_lr2_billboards_rgba_over_s3d_lf_v5_2Kdciufa_lnh"

这是我到目前为止所做的:

re.findall(r"[a-z]+", string.lower())

给出了这个结果:

['ts', 'lod', 'lr', 'billboards', 'rgba', 'over', 's', 'd', 'lf', 'v', 'kdciufa', 'lnh']

...但我正在寻找的结果更像是这样:

['lod', 'billboards', 'rgba', 'over', 'lf', 'lnh']

有没有办法使用正则表达式实现这一目标?

非常感谢,

2 个答案:

答案 0 :(得分:4)

使用负面外观:

re.findall(r"(?<![\da-z])[a-z]+(?![\da-z])", string.lower())

这匹配的小写字母,紧跟在前面或后面跟着更多的字母或数字。

演示:

>>> import re
>>> string = "ts0060_LOD-70234_lr2_billboards_rgba_over_s3d_lf_v5_2Kdciufa_lnh"
>>> re.findall(r"(?<![\da-z])[a-z]+(?![\da-z])", string.lower())
['lod', 'billboards', 'rgba', 'over', 'lf', 'lnh']

答案 1 :(得分:2)

使用findall的另一种方法是将字符串拆分为单个单词,然后过滤掉包含非字母字符的任何单词。

import re

string = "ts0060_LOD-70234_lr2_billboards_rgba_over_s3d_lf_v5_2Kdciufa_lnh"

#split on non-alphanumeric characters
words = re.split("[^a-z0-9]", string.lower())
print "words:", words

filtered_words = filter(str.isalpha, words)
print "filtered words:", filtered_words

结果:

words: ['ts0060', 'lod', '70234', 'lr2', 'billboards', 'rgba', 'over', 's3d', 'lf', 'v5', '2kdciufa', 'lnh']
filtered words: ['lod', 'billboards', 'rgba', 'over', 'lf', 'lnh']