enlever - supprimer ponctuation python




Comment puis-je analyser une chaîne délimitée par des virgules dans une liste(mise en garde)? (4)

Je dois être capable de prendre une chaîne comme:

'''foo, bar, "one, two", three four'''

dans:

['foo', 'bar', 'one, two', 'three four']

J'ai le sentiment (avec des indices de #python) que la solution va impliquer le module shlex.


Cela dépend de la complexité que vous voulez obtenir ... voulez-vous autoriser plus d'un type de devis? Que diriez-vous des citations échappées?

Votre syntaxe ressemble beaucoup au format de fichier CSV commun, qui est pris en charge par la bibliothèque standard Python:

import csv
reader = csv.reader(['''foo, bar, "one, two", three four'''], skipinitialspace=True)
for r in reader:
  print r

Les sorties:

['foo', 'bar', 'one, two', 'three four']

HTH!


La solution de module shlex permet des guillemets échappés, un guillemet évite un autre, et tous les supports de shell fantaisie.

>>> import shlex
>>> my_splitter = shlex.shlex('''foo, bar, "one, two", three four''', posix=True)
>>> my_splitter.whitespace += ','
>>> my_splitter.whitespace_split = True
>>> print list(my_splitter)
['foo', 'bar', 'one, two', 'three', 'four']

Exemple de citations échappées:

>>> my_splitter = shlex.shlex('''"test, a",'foo,bar",baz',bar \xc3\xa4 baz''',
                              posix=True) 
>>> my_splitter.whitespace = ',' ; my_splitter.whitespace_split = True 
>>> print list(my_splitter)
['test, a', 'foo,bar",baz', 'bar \xc3\xa4 baz']

Vous pourriez faire quelque chose comme ceci:

>>> import re
>>> pattern = re.compile(r'\s*("[^"]*"|.*?)\s*,')
>>> def split(line):
...  return [x[1:-1] if x[:1] == x[-1:] == '"' else x
...          for x in pattern.findall(line.rstrip(',') + ',')]
... 
>>> split("foo, bar, baz")
['foo', 'bar', 'baz']
>>> split('foo, bar, baz, "blub blah"')
['foo', 'bar', 'baz', 'blub blah']

Vous pouvez également considérer le module csv . Je ne l'ai pas essayé, mais il semble que vos données d'entrée soient plus proches de CSV que de syntaxe de shell (qui est ce que shlex analyse).







quotes