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

kil*_*own 2 python regex

我希望它只匹配每个单词的结尾

例:

"i am test-ing., i am test.ing-, i am_, test_ing," 
Run Code Online (Sandbox Code Playgroud)

输出应该是:

"i am test-ing i am test.ing i am test_ing"
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 5

>>> 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'
Run Code Online (Sandbox Code Playgroud)

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

好的,但为什么[^\w\s]|_,你问?第一部分匹配任何非字母数字或下划线([^\w])或空格([^\s]),即标点字符.除了我们确实想要消除下划线,所以我们然后包括那些|_.