使用正则表达式仅打印字符串中的字母



目标:我只想在字符串中打印字母

#Input 
#======
string = '   529Wind3@.     '
#Neededoutput
#============
'Wind'

我尝试使用以下代码对此进行编码

import re
string=re.sub('[^a-z]+[^A-Z]',' ',string)
print(string)

我得到的输出是

ind

但此代码仅适用于小写 你能告诉我如何为大写和小写编写代码吗

尝试使用列表推导来检查每个字符是否在string.ascii_letters中,如果是,它将被存储:

import string
String = '   529Wind3@.     '
print(''.join([i for i in String if i in string.ascii_letters]))

输出:

Wind

我同意 @U8-Forward 的观点,但我想你可能也想知道为什么你的正则表达式不起作用。这

[^a-z]+[^A-Z]

不做你想要的,因为W匹配[^a-z]+,所以被删除。

将所有不需要的字符放在一个字符类中:

[^a-zA-Z]+

你需要写[^a-zA-Z]而不是[^a-z]+[^A-Z]+运算符用于检测重复字符,而不是组合多个条件。

根据您的要求尝试以下代码:

import re
string=re.sub('[^a-zA-Z]',' ',string)
print(string)

你可以使用 re.findall

import re
String = '   529Wind3@.     '
string = re.findall('[a-zA-Z]+', String)
print(''.join(string))
print re.sub('[^a-zA-Z]','',string)

最新更新