1

我有以下西班牙语句子。

Oye , si te parece quedamos en El Corte Inglés de Nuevos Ministerios este martes , a las 18:30 , y me ayudas con las compras , te parece los sofás no sé si comprarlos en Zara Home o en la web , que es http:/ /zara-home.es。De todas maneras , dame un toque al +00 000 000 000 y lo hablamos。Te dejo también mi correo ,用户名@domain .com。文加,hasta luego。

从这句话中,我想删除“单词和逗号”和“单词和句号”之间的空格。我正在使用以下代码来完成这项工作。它适用于大多数其他句子,但不适用于上述句子。

sentence = 'Oye , si te parece quedamos en El Corte Inglés de Nuevos Ministerios este martes , a las 18:30 , y me ayudas con las compras , te parece los sofás no sé si comprarlos en Zara Home o en la web , que es http://zara-home.es . De todas maneras , dame un toque al +00 000 000 000 y lo hablamos. Te dejo también mi correo , username@domain .com. Venga , hasta luego.'
full_stop = re.compile(u"(?<=\s)([\w\d\@\-\:\/\.]+\s[\.,])", re.UNICODE)
words_changed = ["".join(full_stops.split()) for full_stops in full_stop.findall(sentence)]
for i,words in enumerate(full_stop.findall(sentence)):
    words = re.sub('\s.','\s\.',words, flags=re.UNICODE)
    sentence = re.sub(words, words_changed[i], sentence, flags=re.UNICODE)
print sentence

为什么 re.sub 并不总是像在 python 中那样起作用?

4

3 回答 3

3

这能满足您的需要吗?

>>> s = u'Oye , si te parece quedamos en El Corte Inglés de Nuevos Ministerios este martes , a las 18:30 , y me ayudas con las compras , te parece los sofás no
sé si comprarlos en Zara Home o en la web , que es http://zara-home.es . De todas maneras , dame un toque al +00 000 000 000 y lo hablamos. Te dejo también mi c
orreo , username@domain .com. Venga , hasta luego.'
>>> import re
>>> s = re.sub(r'\s+([,.])', r'\1', s)
>>> print s
Oye, si te parece quedamos en El Corte Inglés de Nuevos Ministerios este martes, a las 18:30, y me ayudas con las compras, te parece los sofás no sé si comprarl
os en Zara Home o en la web, que es http://zara-home.es. De todas maneras, dame un toque al +00 000 000 000 y lo hablamos. Te dejo también mi correo, username@d
omain.com. Venga, hasta luego.
>>>
于 2012-08-14T17:13:24.163 回答
1

您的代码应该是:

for i, words in enumerate(full_stop.findall(sentence)):
    word = re.sub('\s\.','\s\.', words, flags=re.UNICODE)
    word = re.sub('\s\,','\s\,', word, flags=re.UNICODE)
    sentence = re.sub(word, words_changed[i], sentence, flags=re.UNICODE)
print sentence

但是您的原始正则表达式没有检测到第一个单词:'Oye,'

于 2012-08-14T17:33:02.553 回答
0

你的正则表达式看起来过于复杂。这是一个有效的方法:

>>> sentence = "Oye , si te parece quedamos en El Corte Inglés de Nuevos Ministerios este martes , a las 18:30 , y me ayudas con las compras , te parece los sofás no sé si comprarlos en Zara Home o en la web , que es http://zara-home.es . De todas maneras , dame un toque al +00 000 000 000 y lo hablamos. Te dejo también mi correo , username@domain .com. Venga , hasta luego."
>>> re.sub(r"\s*([\.,])\s*, r"\1", sentence)
'Oye,si te parece quedamos en El Corte Ingl\xc3\xa9s de Nuevos Ministerios este martes,a las 18:30,y me ayudas con las compras,te parece los sof\xc3\xa1s no s\xc3\xa9 si comprarlos en Zara Home o en la web,que es http://zara-home.es.De todas maneras,dame un toque al +00 000 000 000 y lo hablamos.Te dejo tambi\xc3\xa9n mi correo,username@domain.com.Venga,hasta luego.'
>>> print _
Oye,si te parece quedamos en El Corte Inglés de Nuevos Ministerios este martes,a las 18:30,y me ayudas con las compras,te parece los sofás no sé si comprarlos en Zara Home o en la web,que es http://zara-home.es.De todas maneras,dame un toque al +00 000 000 000 y lo hablamos.Te dejo también mi correo,username@domain.com.Venga,hasta luego.
于 2012-08-14T17:38:17.617 回答