如何去除字符串中每个单词末尾的特殊字符?
我想让它只匹配每个单词的结尾部分。
举个例子:
"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 个回答
6
>>> 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]
)的东西,也就是标点符号。不过我们想要去掉下划线,所以我们用 |_
把下划线也包括进来。