【发布时间】:2011-02-15 00:03:12
【问题描述】:
我在 python 中需要类似 grep 的东西 我做了研究,发现 re 模块是合适的 我需要为特定字符串搜索变量
【问题讨论】:
-
很高兴知道。你碰巧对此有疑问吗?
-
你学习过 Python 教程吗?
我在 python 中需要类似 grep 的东西 我做了研究,发现 re 模块是合适的 我需要为特定字符串搜索变量
【问题讨论】:
要在变量中搜索特定字符串,您可以使用in:
>>> 'foo' in 'foobar'
True
>>> s = 'foobar'
>>> 'foo' in s
True
>>> 'baz' in s
False
【讨论】:
使用re.findall 将是最简单的方法。如果这是您要查找的内容,您可以只搜索文字字符串(尽管字符串 in 运算符可以更好地满足您的目的,并且您需要转义正则表达式字符),或者您将传递给的任何字符串grep(虽然我不知道两者之间的语法差异,但我确信有差异)。
>>> re.findall("x", "xyz")
['x']
>>> re.findall("b.d", "abcde")
['bcd']
>>> re.findall("a?ba?c", "abacbc")
['abac', 'bc']
【讨论】:
听起来您真正想要的是能够以一种让您轻松查看特定子字符串所在位置的方式打印大子字符串的能力。有几种方法可以解决这个问题。
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 才能使其正常工作。您当然可以将这两种方法结合起来。
【讨论】: