相对python新手在这里.我有一个我无法修改的程序的文本字符串输出.讨论让我们说:
text = "This text . Is to test . How it works ! Will it! Or won't it ? Hmm ?"
Run Code Online (Sandbox Code Playgroud)
我想在标点符号之前删除空格,但不删除第二个空格.我一直试图用正则表达式来做,我知道我可以使用match ='\ s [\?.!\"]\s'作为我的搜索词来匹配我想要的实例.
x=re.search('\s[\?\.\!\"]\s',text)
Run Code Online (Sandbox Code Playgroud)
是否有一种方法可以使用re.sub替换搜索词并删除前导空格?关于如何进行的任何想法?
在要保留的文本周围放置一个组,并在替换模式中按编号引用该组:
re.sub(r'\s([?.!"](?:\s|$))', r'\1', text)
Run Code Online (Sandbox Code Playgroud)
请注意,我使用r''原始字符串以避免使用太多反斜杠; 但是,你不需要添加那么多.
我还调整了以下空间的匹配; 它现在匹配一个空格或字符串的结尾.
演示:
>>> import re
>>> text = "This text . Is to test . How it works ! Will it! Or won't it ? Hmm ?"
>>> re.sub(r'\s([?.!"](?:\s|$))', r'\1', text)
"This text. Is to test. How it works! Will it! Or won't it? Hmm?"
Run Code Online (Sandbox Code Playgroud)
>>> text = "This text . Is to test . How it works ! Will it! Or won't it ? Hmm ?"
>>> re.sub(r'\s+([?.!"])', r'\1', text)
"This text. Is to test. How it works! Will it! Or won't it? Hmm?"
Run Code Online (Sandbox Code Playgroud)
你不需要逃跑?,.,!,"里面[]becaue特殊字符失去了意义内[]。