我希望它只匹配每个单词的结尾。
例如:
"i am test-ing., i am test.ing-, i am_, test_ing,"
输出应为:
"i am test-ing i am test.ing i am test_ing"
>>> 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]
),即标点符号。但我们确实想要消除下划线,所以我们将其与 |_
包括在一起。
$
会匹配输入字符串的结尾或者字符串末尾的换行符。\Z
只会在字符串的结尾匹配,这通常是期望的行为。 - John Machinr'([^\w\s]|_)+(?=\s|$)'
可以解决空格删除问题。 - jchl