簡體   English   中英

如何在python中替換字符串中的非字母和數字字符

[英]How to replace non-alphabetic AND numeric characters in a string in python

我理解,要替換字符串中的非字母數字字符,代碼如下:

words = re.sub("[^\w]", " ",  str).split()

但是, ^\\w替換非字母數字字符。 我想在字符串中替換非字母和數字字符,如:

"baa!!!!! baa sheep23? baa baa"

我希望它有這樣的結果:

 "baa baa sheep baa baa"

如果我做words = re.sub("[^\\w\\d]", " ", str).split() ,我得到一個數字字符的結果,如'sheep23' 我想這可能是因為"^"也會影響\\d ,並且它就好像我想要刪除非數字字符一樣。 我該怎么做?

使用str.translate

>>> from string import punctuation, digits
>>> s = "baa!!!!! baa sheep23? baa baa"
>>> s.translate(None, punctuation+digits)
'baa baa sheep baa baa'

這里不需要做正則表達式,只需簡單的理解即可:

>>> import string
>>> word = "baa!!!!! baa sheep23? baa baa"
>>> "".join([l for l in word if l in string.ascii_letters+string.whitespace])
'baa baa sheep baa baa'

試試這個正則表達式:

[^a-zA-Z]

這匹配任何不是字母的東西。

或者如果你想保留空格:

[^ A-ZA-Z \\ s]的

那個正則表達式怎么樣?

[^\w]|\d

編輯:

正如@Avinash所說,這不會刪除_ 如果你想要刪除_使用:

[^\w]|[\d_]

如果您還想用一個替換多個空格,請使用:

([^\w]|[\d_])+

這是添加下划線的示例:

In [1]: import re

In [2]: s = "baa!!!!! baa sheep23? baa baa___"

In [3]: re.sub("([^\w]|[\d_])+", " ",  s)
Out[3]: 'baa baa sheep baa baa '

In [4]: re.sub("([^\w]|[\d_])+", " ",  s).split()
Out[4]: ['baa', 'baa', 'sheep', 'baa', 'baa']

通過re.sub函數,

>>> s = "baa!!!!! baa sheep23? baa baa"
>>> m = re.sub(r'[^A-Za-z ]', "", s)
>>> m
'baa baa sheep baa baa'

而不是用空格替換每個非字母然后拆分你可以一次完成所有操作:

>>> re.split("[^a-zA-Z]+", "baa!!!!! baa sheep23? baa baa")
['baa', 'baa', 'sheep', 'baa', 'baa']

[^\\w]相當於[^a-zA-Z0-9_] (模數語言設置),你需要只在你的角色類中保留你想要的東西 - 而[^a-zA-Z]顯然包含空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM