[英]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.