我需要替换某些字符串上两个或多个重复的标点符号。
"asdasdasd - adasdasd asda ------- asda wadsda +-----+ wwww qqqqqq aaaaa"
到
"asdasdasd - adasdasd asda - asda wadsda +- + wwww qqqqqq aaaaa"
我使用 regex101 应用程序创建了这个应用程序:
https://regex101.com/r/vdR5T1/1/
但是当我尝试使用 python 时:
import re
texto = "asdasdasd - adasdasd asda ------- asda wadsda +-----+ wwww qqqqqq aaaaa"
rx = re.compile(r'([[:punct:]])\1{2,}')
texto = rx.sub(' ', texto)
print(texto)
我遇到了这个错误:
FutureWarning: Possible nested set at position 2
rx = re.compile(r'([[:punct:]])\1{2,}')
如何使用 python 运行这个(或类似的)正则表达式?
最佳答案
Python re
不识别 POSIX 括号表达式,因此 [[:punct:]]
看起来像一个嵌套的字符类(因此出现警告消息)。您可以将其替换为包含所有标点符号的字符类,例如[!-/:-@[-`{-~]
。请注意,您的正则表达式需要 3 个或更多相同字符(初始捕获组加上 2 个或更多重复),您只需要 +
而不是 {2,}
并且您需要替换为 \1
以在输出中获取重复字符一次:
import re
texto = "asdasdasd - adasdasd asda ------- asda wadsda +-----+ wwww -- qqqqqq aaaaa"
rx = re.compile(r'([!-/:-@[-`{-~])\1+')
texto = rx.sub(r'\1 ', texto)
print(texto)
输出:
asdasdasd - adasdasd asda - asda wadsda +- + wwww - qqqqqq aaaaa
关于python - 如何替换两个或多个重复的 :punct: using re in python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65136664/