2011-02-15 3 views
3

je besoin de quelque chose comme grep en python J'ai fait des recherches et a trouvé le module re pour convenir je dois rechercher les variables d'une chaîne spécifiquevariables grep en python

+8

Bon à savoir. Avez-vous une question à ce sujet? –

+0

Avez-vous travaillé à travers le tutoriel Python? –

Répondre

4

Pour rechercher une chaîne spécifique dans une variable , vous pouvez simplement utiliser in:

>>> 'foo' in 'foobar' 
True 
>>> s = 'foobar' 
>>> 'foo' in s 
True 
>>> 'baz' in s 
False 
1

l'utilisation re.findall sera la meilleure façon. Vous pouvez rechercher uniquement une chaîne littérale si c'est ce que vous cherchez (bien que votre but soit mieux servi par l'opérateur string in et vous devrez échapper les caractères regex), ou bien toute chaîne que vous passeriez à grep (bien que je ne connaisse pas les différences de syntaxe entre les deux du haut de ma tête, mais je suis sûr qu'il y a des différences).

>>> re.findall("x", "xyz") 
['x'] 
>>> re.findall("b.d", "abcde") 
['bcd'] 
>>> re.findall("a?ba?c", "abacbc") 
['abac', 'bc'] 
1

Il ressemble à ce que vous voulez vraiment est la possibilité d'imprimer une grande chaîne d'une manière qui vous permet de voir facilement où une sous-chaîne est particulièrement. Il y a plusieurs façons d'aborder cela.

def grep(large_string, substring): 
    for line, i in enumerate(large_string.split('\n')): 
     if substring in line: 
      print("{}: {}".format(i, line)) 

Ceci imprimerait seulement les lignes qui ont votre sous-chaîne. Cependant, vous perdriez un tas de contexte. Si vous voulez true grep, remplacez if substring in line par quelque chose qui utilise le module re pour faire correspondre les expressions régulières.

def highlight(large_string, substring): 
    from colorama import Fore 
    text_in_between = large_string.split(substring) 
    highlighted_substring = "{}{}{}".format(Fore.RED, substring, Fore.RESET) 
    print(highlighted_substring.join(text_in_between)) 

Ceci imprimera la chaîne entière, mais avec la sous-chaîne que vous recherchez en rouge. Notez que vous aurez besoin de pip install colorama pour que cela fonctionne. Vous pouvez bien sûr combiner les deux approches.