开发者

grep variable in python

开发者 https://www.devze.com 2023-02-11 13:55 出处:网络
I need something like grep in python I have done research and found the re module to be suit开发者_运维知识库able

I need something like grep in python I have done research and found the re module to be suit开发者_运维知识库able I need to search variables for a specific string


To search for a specific string within a variable, you can just use in:

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


Using re.findall will be the easiest way. You can search for just a literal string if that's what you're looking for (although your purpose would be better served by the string in operator and you'll need to escape regex characters), or else any string you would pass to grep (although I don't know the syntax differences between the two off the top of my head, but I'm sure there are differences).

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


It sounds like what you really want is the ability to print a large substring in a way that lets you easily see where a particular substring is. There are a couple of ways to approach this.

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

This would print only the lines that have your substring. However, you would lose a bunch of context. If you want true grep, replace if substring in line with something that uses the re module to do regular expression matching.

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

This will print the whole large string, but with the substring you are looking for in red. Note that you'll need to pip install colorama for it to work. You can of course combine the two approaches.

0

精彩评论

暂无评论...
验证码 换一张
取 消