代码之家  ›  专栏  ›  技术社区  ›  killown

如何删除字符串中每个单词结尾的特殊字符?

  •  2
  • killown  · 技术社区  · 14 年前

    我要它只匹配每个词的结尾

    例子:

    "i am test-ing., i am test.ing-, i am_, test_ing," 
    

    输出应为:

    "i am test-ing i am test.ing i am test_ing"
    
    1 回复  |  直到 14 年前
        1
  •  5
  •   John Kugelman Michael Hodel    14 年前
    >>> import re
    >>> test = "i am test-ing., i am test.ing-, i am_, test_ing,"
    >>> re.sub(r'([^\w\s]|_)+(?=\s|$)', '', test)
    'i am test-ing i am test.ing i am test_ing'
    

    匹配一个或多个非字母数字字符( [^\w\s]|_ )后面跟着一个空格( \s )或字符串的结尾( $ )这个 (?= ) 构造是一个先行断言:它确保匹配空间不包含在匹配中,因此不会被替换;只有 [\W_]+ 被替换。

    好吧,但是为什么 [^ \w s] 你问?第一部分匹配任何不是字母数字或下划线的内容( [^\w] )或空白( [^\s] ,即标点符号。但我们确实想消除下划线,因此我们将这些下划线包括在 |_ .