python - 如何替换两个或多个重复的 :punct: using re in python?

标签 python regex python-re

我需要替换某些字符串上两个或多个重复的标点符号。

"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/

相关文章:

python - 我可以告诉 PyInstaller 打包我的整个源代码树吗?

regex - 正则表达式单词边界,不包括连字符

php - 如何preg_replace括号内的特定字符?

python - 基于不同模式(在单个表达式中)拆分文本的正则表达式

python - 如何使用正则表达式删除字符串上嵌套文本周围的图案文本?

python - 找到最小距离为 `n` 的 `d` 个不同向量的子集

python - protoc 在 Windows 7 中找不到文件

javascript - 如何通过HTML按钮运行Python脚本?

Python搜索字符串包含字符

javascript - Unicode Javascript - 需要向用户显示无效字符