Python 如何删除字符串中每个单词末尾的特殊字符?
我希望它只匹配每个单词的结尾 例如:Python 如何删除字符串中每个单词末尾的特殊字符?,python,regex,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" 匹配一个或多个非字母数字字符([^\w\s]| ),后跟空格(\s)或字符串结尾($)。(?=)构造是一个前瞻性断言:它确保匹配中不包含匹配空间,因此不会被替换;只有[\W\u]+被替换 好吧,但你问为什么?第一部分匹配非字母数字或下划线([^\w])或
"i am test-ing., i am test.ing-, i am_, test_ing,"
输出应为:
"i am test-ing i am test.ing i am test_ing"
匹配一个或多个非字母数字字符([^\w\s]|
),后跟空格(\s
)或字符串结尾($
)。(?=)
构造是一个前瞻性断言:它确保匹配中不包含匹配空间,因此不会被替换;只有[\W\u]+
被替换
好吧,但你问为什么?第一部分匹配非字母数字或下划线(
[^\w]
)或空白([^\s]
)的任何内容,即标点字符。除非我们确实想消除下划线,所以我们然后包括那些带有|
的下划线。约翰:谢谢你的回答,我想知道$和\Z之间有什么区别?-1通常(非多行)有区别$
与输入字符串的结尾或字符串结尾的换行符完全匹配\Z
只在字符串末尾匹配,这通常是所需的行为。更准确地说:“或在换行符之前…”此解决方案还删除单词之间多余的空格,这可能是无意的(可能是不希望的)副作用。我认为使用r'([^\w\s]|||+(?=\s |$)“
将解决空白删除问题。
>>> 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'