![](/img/trans.png)
[英]How do you write a regex in python that finds all word which contain only letters, numbers and underscore?
[英]How do you filter a string to only contain letters?
我如何制作一个函数,它将过滤掉字符串中的所有非字母? 例如, letters("jajk24me")
将返回"jajkme"
。 (它需要是一个 for 循环)并且string.isalpha()
函数会帮助我解决这个问题吗?
我的尝试:
def letters(input):
valids = []
for character in input:
if character in letters:
valids.append( character)
return (valids)
如果它需要在那个 for 循环中,而正则表达式不起作用,那么对循环的这个小修改将起作用:
def letters(input):
valids = []
for character in input:
if character.isalpha():
valids.append(character)
return ''.join(valids)
(最后的''.join(valids)
获取您在列表中收集的所有字符,并将它们连接成一个字符串。您的原始函数返回该字符列表)
您还可以从字符串中过滤掉字符:
def letters(input):
return ''.join(filter(str.isalpha, input))
或使用列表理解:
def letters(input):
return ''.join([c for c in input if c.isalpha()])
或者您可以使用正则表达式,正如其他人所建议的那样。
import re
valids = re.sub(r"[^A-Za-z]+", '', my_string)
编辑:如果它需要是一个 for 循环,这样的事情应该可以工作:
output = ''
for character in input:
if character.isalpha():
output += character
请参阅re.sub
,为了性能考虑重新re.compile
以优化模式一次。
下面是一个简短的版本,它匹配不在A
到Z
范围内的所有字符,并将它们替换为空字符串。 re.I
标志忽略大小写,因此小写 ( az
) 字符也被替换。
import re
def charFilter(myString)
return re.sub('[^A-Z]+', '', myString, 0, re.I)
如果你真的需要那个循环,有很多 awnsers,专门解释这一点。 但是,您可能想给出需要循环的原因。
如果您想对数字序列进行操作并且这就是循环的原因,请考虑使用如下函数替换替换字符串参数:
import re
def numberPrinter(matchString) {
print(matchString)
return ''
}
def charFilter(myString)
return re.sub('[^A-Z]+', '', myString, 0, re.I)
方法 string.isalpha() 检查字符串是否仅由字母字符组成。 您可以使用它来检查是否需要进行任何修改。 至于问题的另一部分, pst 是正确的。 您可以在 python 文档中阅读有关正则表达式的信息: http : //docs.python.org/library/re.html它们可能看起来令人生畏,但一旦掌握了它们就非常有用。
当然,您可以使用isalpha
。 此外, valids
可以是字符串。
干得好:
def letters(input):
valids = ""
for character in input:
if character.isalpha():
valids += character
return valids
不使用 for 循环。 但这已经被彻底覆盖了。
可能有点晚了,我不确定性能,但我只是想到了这个看起来很漂亮的解决方案:
set(x).intersection(y)
你可以像这样使用它:
from string import ascii_letters
def letters(string):
return ''.join(set(string).intersection(ascii_letters))
注意:这不会保留线性顺序。 这在我的使用情况是好的,但被警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.