2010-03-05 7 views
0

Cela fait des années (et des années) que j'ai fait une regex, donc je me suis tourné vers les experts ici car c'est probablement un exercice banal :)Regex + Python pour supprimer les caractères de fin et de fin spécifiques de la valeur dans le fichier délimité par des tabulations

J'ai un fichier délimité par des tabulations et sur chaque ligne je un certains domaines qui ont des valeurs telles que:

  • foo
  • bar
  • b "bar de foo"
  • b'bar foo »
  • b'carbar '

(Une ligne complète dans le fichier pourrait être quelque chose comme:

123 \ t b'bar foo' \ TABC \ T123 \ r \ n

Je veux me débarrasser de tous les principaux b ', b "et", "de ce champ sur chaque ligne. Ainsi, compte tenu de la ligne d'exemple ci-dessus, après l'exécution du regex, je reçois:

123 \ t bar foo \ TABC \ T123 \ r \ n

points de bonus si vous pouvez me donner le python texte de présentation pour exécuter cela sur le fichier.

Répondre

1

pour chaque ligne que vous pouvez utiliser

re.sub(r'''(?<![^\t\n])\W*b(["'])(.*)\1\W*(?![^\t\n])''', r'\2', line) 

et pour les points de bonus:

import re 

pattern = re.compile(r'''(?<![^\t\n])\W*b(["'])(.*?)\1\W*?(?![^\t\n])''') 
with open('outfile', 'w') as outfile: 
    for line in open('infile'): 
     outfile.write(pattern.sub(r'\2', line)) 
1

(^ | \ t) b [\ "'] doit correspondre aux plombages, et pour la fuite:

\"' devrait le faire

En Python, vous faites:

import re 
r1 = re.compile("(^|\t)b[\"']") 
r2 = re.compile("[\"'](\t|$)") 

alors utilisez simplement

r1.sub("\\1", yourString) 
r2.sub("\\1", yourString) 
0
>>> "b\"foo's bar\"".replace('b"',"").replace("b'","").rstrip("\"'") 
"foo's bar" 
>>> "b'bar foo'".replace('b"',"").replace("b'","").rstrip("\"'") 
'bar foo' 
>>> 
Questions connexes