Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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_Punctuation - Fatal编程技术网

Python:使用正向前瞻删除标点之间的空格

Python:使用正向前瞻删除标点之间的空格,python,regex,punctuation,Python,Regex,Punctuation,我试图删除句子中标点符号之间的空格。举例来说,数据集有许多字符串,如下所示: "This is a very nice text : ) : ) ! ! ! ." "This is a very nice text :):)!!!." 但我想让它们看起来像这样: "This is a very nice text : ) : ) ! ! ! ." "This is a very nice text :):)!!!." 我想通过使用来实现这一点,但是有人能告诉我如何在Python中

我试图删除句子中标点符号之间的空格。举例来说,数据集有许多字符串,如下所示:

 "This is a very nice text : ) : ) ! ! ! ."
 "This is a very nice text :):)!!!."
但我想让它们看起来像这样:

 "This is a very nice text : ) : ) ! ! ! ."
 "This is a very nice text :):)!!!."
我想通过使用来实现这一点,但是有人能告诉我如何在Python中实现这一点吗。我现在有了代码,但添加了额外的空格,这与我想要的正好相反:

 string = re.sub('([.,!?()])', r' \1', string)

原则上,您可以找到标点符号(您捕获的)之间的空格(空格?),并仅替换捕获的标点符号:

string = re.sub('([:.,!?()]) ([:.,!?()])', r'\1\2', string)
然而,这将导致

This is a very nice text :) :) !! !.

自从代码> Re.Sub <代码>不考虑重叠匹配。


因此,您需要使用零宽度的“向前看”和“向后看”——它们不计入匹配中,因此匹配的部分只是空格字符,然后替换为空字符串

string = re.sub('(?<=[:.,!?()]) (?=[:.,!?()])', '', string)

string=re.sub(”(?原则上,您可以找到标点符号(您捕获的)之间的空格,并仅替换捕获的标点符号:

string = re.sub('([:.,!?()]) ([:.,!?()])', r'\1\2', string)
然而,这将导致

This is a very nice text :) :) !! !.

自从代码> Re.Sub <代码>不考虑重叠匹配。


因此,您需要使用零宽度的“向前看”和“向后看”——它们不计入匹配中,因此匹配的部分只是空格字符,然后替换为空字符串

string = re.sub('(?<=[:.,!?()]) (?=[:.,!?()])', '', string)

string=re.sub(”(?您可以使用如下正则表达式:

(?<=[.:,!?()])\s+(?=[.:,!?()])
然后产生:

>>> rgx.sub('', 'This is a very nice text : ) : ) ! ! ! .')
'This is a very nice text :):)!!!.'

您可以使用以下正则表达式:

(?<=[.:,!?()])\s+(?=[.:,!?()])
然后产生:

>>> rgx.sub('', 'This is a very nice text : ) : ) ! ! ! .')
'This is a very nice text :):)!!!.'

您没有在这个正则表达式中使用任何前瞻。@Norrius:如果标点符号既是一个空格的“前瞻”又是“向后看”,那么这可能很有用下一个的。@WillemVanOnsem这是一个很好的观点,我不知何故认为OP是在尝试向前看空格。你在这个正则表达式中没有使用任何向前看。@Norrius:如果标点符号既是一个空格的“向前看”又是“向后看”,这可能会很有用下一个。@ WillemVanOnsem,这是一个很好的观点,我不知怎么想,OP正在试图寻找空格。“奥利弗,如果它对你有用的话,请考虑接受这个答案(点击左边的灰色复选标记)。@奥利弗,如果它对你有用的话,请考虑接受答案(点击左边的灰色复选标记)。