如何仅保留字母数字和空格,并忽略非ASCII字符?

18

我有这一行代码可以删除所有非字母数字字符,除了空格

re.sub(r'\W+', '', s)

尽管如此,它仍然保留非英文字符。

例如,如果我有

re.sub(r'\W+', '', 'This is a sentence, and here are non-english 托利 苏 !!11')

我希望获得的输出为:

> 'This is a sentence and here are non-english  11'

1
在你的示例输出中,您没有使用,!,但是您有-,您确切地想要保留什么? - ruohola
3个回答

46
re.sub(r'[^A-Za-z0-9 ]+', '', s)

(编辑) 为了澄清: [] 创建字符列表。 ^ 否定列表。A-Za-z 是英文字母表, 是空格。对于任何一个或多个这些字符(也就是说,任何不是A-Z、a-z或空格的字符),替换为空字符串。


3
请注意,如果您需要任何空格,而不仅仅是普通空格,请将 替换为 \s - Nir Levy
5
如果您需要更多字符,请在列表后添加它们。如果您需要“-”(破折号),请确保它是列表中的最后一项,例如[0-9A-Za-z ,.-] - Nir Levy

9

这可能不是对这个具体问题的答案,但我在研究中遇到了这个线程。

我想达到与问者相同的目标,但我想包含非英语字符,如:ä、ü、ß等。

根据问者的代码,空格也将被删除。

一个简单的解决方法是:

re.sub(r'[^ \w+]', '', string)

The ^ 符号表示选择除以下内容之外的所有内容。在这种情况下,就是 \w 符号,也就是每个单词字符(包括非英文字符)和空格。

我希望这能够帮助到未来的某个人。


3

我曾经遇到过完全相同的问题,唯一的区别是我无法导入任何东西或使用正则表达式。

为了解决我的问题,我创建了一个包含我想要保留的所有值的列表:

values = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ")

然后我创建了一个函数,循环遍历字符串中的每个项,如果它不在values列表中,就从字符串中移除(替换)它:

def remover(my_string = ""):
  for item in my_string:
    if item not in values:
      my_string = my_string.replace(item, "")
  return my_string

例如,以下代码:
print(remover("H!e£l$l%o^ W&o*r(l)d!:)"))

应输出:

'Hello World'

虽然这不是最好的方法,但鉴于情况,这是一种快速简便的方法来完成工作。

注意: 你可以通过将 if item not in values 改为 if item in values 来替换在 values 列表中的已经存在的项目。

注意: 我不能使用字符串常量,因为必须导入 string 包才能使用它们。

祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接