Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除字符串中每个单词末尾的特殊字符?_Python_Regex - Fatal编程技术网

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'