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

时间:2010-08-25 00:21:17

标签: python regex

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

示例:

"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 个答案:

答案 0 :(得分: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'

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

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