如何在python中替换正则表达式?

如何在python中替换正则表达式?,python,regex,string,text,Python,Regex,String,Text,给定一个字符串,在Python中: s = "(((((hi abc )))))))" s = "***(((((hi abc ***&&&&" 如何将出现3次以上的所有非字母符号替换为空白字符串 对于上述所有情况,结果应为: hi abc 这应该有效:\W{3,}:匹配出现3次或以上的非字母数字: 如果您想替换任何非空格非字母数字序列(例如,“!?&”以及您的示例),@Stephen的答案很好。但是,如果您只想替换三个或更多相同的非字母数字的序列,则反向引用

给定一个字符串,在Python中:

s = "(((((hi abc )))))))"
s = "***(((((hi abc ***&&&&"
如何将出现3次以上的所有非字母符号替换为空白字符串

对于上述所有情况,结果应为:

hi abc

这应该有效:
\W{3,}
:匹配出现3次或以上的非字母数字:


如果您想替换任何非空格非字母数字序列(例如,
“!?&”
以及您的示例),@Stephen的答案很好。但是,如果您只想替换三个或更多相同的非字母数字的序列,则反向引用将有助于:

>>> r3 = re.compile(r'(([^\s\w])\2{2,})')
>>> r3.findall('&&&xxx!&?yyy*****')
[('&&&', '&'), ('*****', '*')]
例如:

>>> r3.sub('', '&&&xxx!&?yyy*****')
'xxx!&?yyy'
您不能(很容易地,使用正则表达式)将其替换为与替换文本长度相同的“空白字符串”。您可以将其替换为空字符串
或单个空格
或您选择的任何其他常量字符串;我在示例中使用了
“*”
,以便更容易看到发生了什么

>>> re.sub(r"(\W)\1{3,}", "*", "12345<><>aaaaa%%%11111<<<<..>>>>")
'12345<><>aaaaa%%%11111*..*'
>>>
>>re.sub(r“(\W)\1{3,}”、“*”、“12345AAAA%%%11111”)
“12345AAAA%%%11111*.*”
>>>

请仔细注意:它不会更改“”。。。我假设“出现3次以上的非字母符号”意味着同一符号必须出现3次以上。我还假设您的意思是“超过3次”,而不是“3次或更多”。

如果输入是
”(&*hello@#“
?@John:正确。示例包括“***”,所以我猜测他想要3+…我相信,在这个解决方案下,他能够想出如何添加一个。(这就是为什么我将3或更多斜体)+1,我回来添加我的答案的反向引用,但我会让你得到它…)@John,是的,但正如@Stephen已经解释的那样,更可信的是,OP在英语中犯了一个小小的错误,而不是在他所期望的行为的例子中犯了一个彻底的错误;-)。
>>> re.sub(r"(\W)\1{3,}", "*", "12345<><>aaaaa%%%11111<<<<..>>>>")
'12345<><>aaaaa%%%11111*..*'
>>>