2011-02-15 63 views
3

我需要在Python 類似的grep我已經做了研究,發現re模塊是合適的 我需要尋找變量特定字符串grep的變量

+8

很高興知道。你碰巧對此有疑問嗎? – 2011-02-15 00:04:28

回答

4

要將變量中搜索特定字符串,你可以用in

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

使用re.findall將是最簡單的方法。你可以搜索只是一個字符串,如果這就是你想要的(儘管你的目的會更好地服務於字符串in運算符,你需要轉義正則表達式字符),否則你會傳遞給grep(雖然我不知道兩者之間的語法差異,但我確定它們之間存在差異)。

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

這聽起來像你真正想要的是一個方法,可以讓你輕鬆地看到一個特定子是打印一個大子的能力。有幾種方法可以解決這個問題。

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

這將打印只有你的子字符串的行。但是,你會失去一堆上下文。如果您需要真正的grep,請將if substring in line替換爲使用re模塊進行正則表達式匹配的內容。

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)) 

這將打印整個大字符串,但與您正在尋找紅色的子字符串。請注意,您需要pip install colorama才能運作。你當然可以結合這兩種方法。