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

3 投票
1 回答
5236 浏览
提问于 2025-04-16 03:15

我想让它只匹配每个单词的结尾部分。

举个例子:

"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])的东西,也就是标点符号。不过我们想要去掉下划线,所以我们用 |_ 把下划线也包括进来。

撰写回答