OVH Cloud OVH Cloud

normalize_whitespace

2 réponses
Avatar
Jules
Bonjour,

Afin d'inclure "proprement" du texte (avec aussi des balises HTML) dans
une requête SQL, j'utilise préalablement la fonction :

def normalize_whitespace(text):
"Remove redundant whitespace from a string"
return ' '.join(text.split())

Le problème est que, tout les sauts de ligne sont ignorés... Normal...
Il ne reste que les <espaces>

Auriez-vous une idée pour pouvoir transformer les sauts de ligne de mon
texte en balise <br> ?

Le texte :

Bonjour,
C'est une question.
Merci.

devient à l'affichage :

Bonjour, C'est une question. Merci.

J'utilise emacs (sous GNU/Linux) comme éditeur si cela peut être utile
Merci.
Rémi

2 réponses

Avatar
Jerome
Jules wrote:
Bonjour,

Bonjour


def normalize_whitespace(text):
"Remove redundant whitespace from a string"
return ' '.join(text.split())



def normalize_whitespace(text):
"Remove redundant whitespace from a string"
s = text.replace('n', '<br>')
return ' '.join(s.split())

Ca te conviendrait ?

Avatar
bruno modulix
Jerome wrote:
Jules wrote:

Bonjour,

Bonjour



def normalize_whitespace(text):
"Remove redundant whitespace from a string"
return ' '.join(text.split())



def normalize_whitespace(text):
"Remove redundant whitespace from a string"
s = text.replace('n', '<br>')
return ' '.join(s.split())

Ca te conviendrait ?


Perso, je le separerais:

def normalize_whitespace(text):
"Remove redundant whitespace from a string"
return ' '.join(text.split())

def nl2br(text, xhtmlúlse):
return text.replace('n', ['<br>', '<br />'][bool(xhtml)])

Quite à le recomposer après:
clean_text = lambda text: normalize_whitespace(nl2br(text, False))


<have-fun-with-oo>
Ou, pour faire plus plus OO:

def normalize_whitespace(text, **ignore):
"Remove redundant whitespace from a string"
return ' '.join(text.split())

def nl2br(text, xhtmlúlse, **ignore):
return text.replace('n', ['<br>', '<br />'][bool(xhtml)])


class TextCleaner(object):
""" implementation naïve et non testée """
def __init__(self, *filters, **filters_args):
self.setFilters(*filters, **filters_args)

def setFilters(self, *filters, **filters_args):
self._filters = list(filters)
self._filters_args = filters_args.copy()
return self

def appendFilter(self, filter, **filter_args):
if not filter in self._filters:
self.updateFilterArgs(**filter_args)
self._filters.append(filter)
return self

def insertFilter(self, filter, before, **filter_args):
if not filter in self._filters:
try:
pos = self._filters.index(before)
except ValueError:
pos = 0
self.updateFilterArgs(**filter_args)
self._filters.insert(pos, filter)
return self

def removeFilter(self, filter):
try:
l.remove(filter)
except ValueError:
pass
return self

def updateFilterArgs(self, **filters_args):
self._filters_args.update(filters_args)
return self

def removeFilterArgs(self, *argnames):
for arg in argnames:
try:
del self._filters_args[arg]
except KeyError:
pass
return self

def __call__(self, text):
for f in self._filters:
text = f(text, **self._filters_args)
return text

clean_text=TextCleaner(nl2br, normalize_whitespace, xhtmlúlse)

le_texte="""
Bonjour,
C'est une question.
Merci.
"""

print clean_text(le_texte)

</have-fun-with-oo>


--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"