我正在尝试删除句子中标点符号之间的空格。为了说明这一点,数据集具有许多如下所示的字符串:
"This is a very nice text : ) : ) ! ! ! ."
但是我希望他们看起来像这样:
"This is a very nice text :):)!!!."
我想使用RegEx positive lookahead来做到这一点,但是有人可以告诉我如何在Python中做到这一点。我现在有代码,但是通过添加额外的空格来实现与我想要的相反的操作:
string = re.sub('([.,!?()])', r' \1', string)
答案 0 :(得分:4)
原则上,您可以找到(捕获的)标点符号之间的空格(空格?),并仅替换捕获的标点符号:
import java.util.Scanner;
public class hello {
public static void main(String[] args) {
int name;
Scanner sc = new Scanner(System.in);
System.out.println("Enter your name");
name = sc.nextInt();
sc.close();
System.out.println("Your name"+name);
}
}
但是,这将导致
string = re.sub('([:.,!?()]) ([:.,!?()])', r'\1\2', string)
因为This is a very nice text :) :) !! !.
不考虑重叠匹配。
因此,您需要使用零宽先行和后行-它们不计入匹配项,因此匹配的部分只是空格字符,然后我们将其替换为空字符串。
re.sub
其结果为string = re.sub('(?<=[:.,!?()]) (?=[:.,!?()])', '', string)
答案 1 :(得分:2)
您可以使用如下正则表达式:
(?<=[.:,!?()])\s+(?=[.:,!?()])
在括号之间的两个部分是向后看和向后看,它们用于查找标点符号。然后,我们匹配\s+
(一个或多个空格部分)。然后,我们可以将其替换为空字符串。例如:
import re
rgx = re.compile(r'(?<=[.:,!?()])\s+(?=[.:,!?()])')
rgx.sub('', 'This is a very nice text : ) : ) ! ! ! .')
然后产生:
>>> rgx.sub('', 'This is a very nice text : ) : ) ! ! ! .')
'This is a very nice text :):)!!!.'