正则表达式:匹配连续的标点符号并替换为第一个

时间:2017-02-06 08:47:12

标签: python regex

我正在尝试删除一些预定义的连续标点符号,并将其替换为第一个标点符号。因此:

  1. u.s。, - > U.S。
  2. U.S。 - > U.S。
  3. 中美! - > U.S。
  4. hiiii !!!, - > hiiii!
  5. 我尝试了以下代码:

    import re
    r = re.compile(r'([.,/#!$%^&*;:{}=-_`~()])*\1')
    n = r.sub(r'\1', "ews by almalki : Tornado, flood deaths reach 18 in U.s., more storms ahead ")
    print(n)
    

1 个答案:

答案 0 :(得分:4)

您只需要捕获第一个标点符号并匹配其余标点符号:

([.,/#!$%^&*;:{}=_`~()-])[.,/#!$%^&*;:{}=_`~()-]+

请参阅regex demo

请注意,-必须放在字符类的结尾(或开头),以便不创建范围(或者可以在字符类中转义)。

<强>详情:

  • ([.,/#!$%^&*;:{}=_`~()-]) - 使用您定义的标点符号捕获组
  • [.,/#!$%^&*;:{}=_`~()-]+ - 1个标点符号

Python demo

import re
r = re.compile(r'([.,/#!$%^&*;:{}=_`~()-])[.,/#!$%^&*;:{}=_`~()-]+')
n = r.sub(r'\1', "ews by almalki : Tornado, flood deaths reach 18 in U.s., more storms ahead ")
print(n)