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正在试图寻找空格。“奥利弗,如果它对你有用的话,请考虑接受这个答案(点击左边的灰色复选标记)。@奥利弗,如果它对你有用的话,请考虑接受答案(点击左边的灰色复选标记)。