2017-02-24 26 views
0

我这种情况,我有错点的句子来处理,这句话(。):正则表达式替换为字符串的Python

sentence = 'Hi. Long time no see .how are you ?can you follow [email protected]?' 

我试图规范这句话,如果你看到它,有是一些错误的格式句子(.how,?can和。@ abcde)。我正在考虑使用正则表达式来处理这个问题,因为句子不断变化。这是到目前为止我的代码:(。)(?) 进口再

character = ['.','?','@'] 

sentence = 'Hi. Long time no see .how are you ?can you follow [email protected]?' 

sentence = str(sentence) 
for i in character: 
    charac = str(i) 
    charac_after = re.findall(r'\\'+charac+r'\S*', sentence) 
    if charac_after: 
     print("Exist") 
     sentence = sentence.replace(charac, charac+' ') 

print(sentence) 

结果一些如何跳过点,并在(@),它只是处理问号。这是结果: 存在

Hi. Long time no see .how are you ? can you follow [email protected]? 

它应该是“嗨,好久不见你怎么可以你关注@ ABCDE。?。?”。我不知道“r'\'+ charac + r'\ S *'”中的双反斜杠是错的还是什么,我错过了什么?

如何处理所有角色?请帮忙。

+1

我不知道蟒蛇,但你可能需要正确逃生看到http://stackoverflow.com/questions/280435/escaping-regex-string-in-python – Fallenhero

+0

如果'r'\\''应该转义下一个字符,则只需要使用单个反斜杠。目前你正在逃避反斜杠。但是,您应该使用're.escape'来代替。 –

+0

但我认为你的代码有问题。你会在每一个'。|?| @'之后增加一个空格,这个 – Fallenhero

回答

0

没有蟒蛇的任何knowlegde我认为你需要做的是这样的:

(按从@Sebastian Proske建议)

character = ['.','?','@'] 
sentence = str('Hi. Long time no see .how are you ?can you follow [email protected]?') 
sentence = re.sub(r'([' + ''.join(map(re.escape, character)) + r'])(?=\S)', r'\1 ', sentence) 
print(sentence) 

我不知道有关的代码,但正则表达式。在这里看到: https://regex101.com/r/HXdeuK/2

看到演示这里https://repl.it/Fw5b/3

+0

嗨,以前感谢,我得到新的错误: sre_constants.error:模式的意外结束 – ytomo

+0

这些字符会改变?或者你为什么不直接在正则表达式中使用它们,就像我在regex101 – Fallenhero

+0

上做的那样。我得到了反向引用错误,我更新了它。现在它完美的工作 – Fallenhero