仅删除连续的特殊字符,但保留连续的 [a-zA-Z0-9] 和单个字符
remove only consecutive special characters but keep consecutive [a-zA-Z0-9] and single characters
如何删除字符串中连续多次出现的 all 特殊字符?
我可以获得如下代码:
re.sub('\.\.+',' ',string)
re.sub('@@+',' ',string)
re.sub('\s\s+',' ',string)
对于个人,在最好的情况下,对列表中的所有字符使用循环,例如:
from string import punctuation
for i in punctuation:
to = ('\' + i + '\' + i + '+')
string = re.sub(to, ' ', string)
但我相信也有一个有效的方法。
我试过了:
re.sub('[^a-zA-Z0-9][^a-zA-Z0-9]+', ' ', '\n\n.AAA.x.@@+*@#=..xx000..x..\t.x..\nx*+Y.')
但它删除了所有特殊字符,除了前面有字母的字符。
字符串可以有不同的连续特殊字符,如 99@aaaa*!@#$.
但不相同 ++--...
.
匹配 Python 中所有非字母数字字符的模式是 [\W_]
。
因此,您只需用捕获组包裹模式并在其后添加 +
以匹配连续出现 2 次或更多次相同的非字母数字字符:
text = re.sub(r'([\W_])+',' ',text)
在 Python 3.x 中,如果您希望使模式仅识别 ASCII,请使用 re.A
或 re.ASCII
标志:
text = re.sub(r'([\W_])+',' ',text, flags=re.A)
注意使用定义原始字符串文字的 r
前缀(这样您就不必转义 \
字符)。
参见regex demo. See the Python demo:
import re
text = "\n\n.AAA.x.@@+*@#=..xx000..x..\t.x..\nx*+Y."
print(re.sub(r'([\W_])+',' ',text))
输出:
.AAA.x. +*@#= xx000 x .x
x*+Y.
如何删除字符串中连续多次出现的 all 特殊字符?
我可以获得如下代码:
re.sub('\.\.+',' ',string)
re.sub('@@+',' ',string)
re.sub('\s\s+',' ',string)
对于个人,在最好的情况下,对列表中的所有字符使用循环,例如:
from string import punctuation
for i in punctuation:
to = ('\' + i + '\' + i + '+')
string = re.sub(to, ' ', string)
但我相信也有一个有效的方法。
我试过了:
re.sub('[^a-zA-Z0-9][^a-zA-Z0-9]+', ' ', '\n\n.AAA.x.@@+*@#=..xx000..x..\t.x..\nx*+Y.')
但它删除了所有特殊字符,除了前面有字母的字符。
字符串可以有不同的连续特殊字符,如 99@aaaa*!@#$.
但不相同 ++--...
.
匹配 Python 中所有非字母数字字符的模式是 [\W_]
。
因此,您只需用捕获组包裹模式并在其后添加 +
以匹配连续出现 2 次或更多次相同的非字母数字字符:
text = re.sub(r'([\W_])+',' ',text)
在 Python 3.x 中,如果您希望使模式仅识别 ASCII,请使用 re.A
或 re.ASCII
标志:
text = re.sub(r'([\W_])+',' ',text, flags=re.A)
注意使用定义原始字符串文字的 r
前缀(这样您就不必转义 \
字符)。
参见regex demo. See the Python demo:
import re
text = "\n\n.AAA.x.@@+*@#=..xx000..x..\t.x..\nx*+Y."
print(re.sub(r'([\W_])+',' ',text))
输出:
.AAA.x. +*@#= xx000 x .x
x*+Y.