【问题标题】:Removing a string that does not contain letters from a list of strings in python从python中的字符串列表中删除不包含字母的字符串
【发布时间】:2014-10-31 01:45:12
【问题描述】:

我正在用 python 制作一个文本分析器。我正在尝试从该列表中删除任何不包含任何字母或整数的字符串。我被卡住了,不知道该怎么做。目前在计算我的列表的长度时,它包括字符串'-',我不希望它,因为我不想把它算作一个词。但是我宁愿不使用 string.remove('-') 因为我希望它适用于其他输入。

提前致谢。

【问题讨论】:

标签: python string python-3.4


【解决方案1】:

我认为你的意思是你想从字符串列表中过滤掉没有字母数字字符的字符串。所以 ['a','b','*'] => ['a','b']

不太难:

In [39]: l = ['adsfg','sdfgb','gdc','56hjfg1','&#$%^',"asfgd3$#$%^" ]
In [40]: l = filter (lambda s:any([c.isalnum() for c in s]), l)
Out[41]:  ['adsfg', 'sdfgb', 'gdc', '56hjfg1', 'asfgd3$#$%^']

In [42]: 

【讨论】:

  • 请注意,该问题被标记为 3.4,因此您需要在其中添加一个额外的 list 以获得该输出,例如list(filter(lambda s:any(c.isalnum() for c in s), l)).
【解决方案2】:

如果您想保留包含字母数字字符的字符串,但 包含非字母数字字符:

import re

strings = ["string", "&*()£", "$^TY?", "12345", "2wE4T", "@#~\!", "^(*4"]

strings = [s for s in strings if re.search(r'\w+', s)] #  \w matches alphanumeric chars

print strings
['string', '$^TY?', '12345', '2wE4T', '^(*4'] # now we can work with these wanted strings

否则,仅保留完全由字母数字字符填充且仅由字母数字字符填充的字符串:

str.isalnum() 是你的男人:

strings = [s for s in strings if s.isalnum()]
print strings
['string', '12345', '2wE4T']

更多关于 re 模块:

https://docs.python.org/2/howto/regex.html

http://www.regular-expressions.info/tutorial.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2019-03-15
    相关资源
    最近更新 更多