Convertir les arguments de ligne de commande à l'expression régulière

Dire, par exemple, je veux savoir si le modèle "\section" qui est dans le texte "abcd\sectiondefghi". Bien sûr, je peux le faire:

import re

motif = r"\\section"
txt = r"abcd\sectiondefghi"
pattern = re.compile(motif)
print pattern.findall(txt)

Qui va me donner ce que je veux. Cependant, chaque fois que je veux trouver un nouveau modèle dans un nouveau texte, j'ai du modifier le code ce qui est douloureux. Donc, je veux écrire quelque chose de plus souple, comme ceci (test.py):

import re
import sys

motif = sys.argv[1]
txt = sys.argv[2]
pattern = re.compile(motif)
print pattern.findall(txt)

Alors, je veux l'exécuter dans le terminal comme ceci:

python test.py \\section abcd\sectiondefghi

Toutefois, cela ne marchera pas (je déteste utiliser \\\\section).

Donc, est-il un moyen de convertir mon entrée de l'utilisateur (soit à partir du terminal ou à partir d'un fichier) pour python chaîne brute? Ou est-il une meilleure façon de faire le modèle d'expression régulière de compilation à partir de la saisie de l'utilisateur?

Merci beaucoup.

  • Notez que cette question n'est pas vraiment à propos de la conversion d'une chaîne d'une chaîne brute. Ici, le problème est tout simplement que le shell en cours d'exécution dans le terminal vous oblige à échapper aux arguments de ligne de commande. La plupart des shells tournera que \s dans cd\sec en un vieux s caractère. Peu importe ce que vous faites dans le code python, vous ne serez pas en mesure de dire qu'il y avait une barre oblique inverse devant que s. Pour une question qui est vraiment sur la façon de transformer les caractères spéciaux dans une chaîne de caractères dans des séquences d'échappement, voir ici.
InformationsquelleAutor dbrg77 | 2013-07-24