Python:如何找到与给定的多种模式匹配的所有字符串

时间:2015-05-04 03:05:40

标签: python search grep

我是Python的新手,并且一直在尝试查找匹配多个模式的所有字符串。我做了一些谷歌搜索,发现了一些建议将所有模式编译成一个的帖子。但是他们使用的re.search()函数只返回第一个匹配的实例。我需要按照它们出现的顺序搜索匹配任何模式的所有字符串实例。欢迎任何方向/建议。

更具体地说,我正在寻找类似于这个grep命令的东西

grep -i "[0-9' '-:A-Za-z].* ERROR.*Job failed\|Caused by:\|^      *at\|ERROR\|more$" <file-name>

3 个答案:

答案 0 :(得分:2)

re.findall(combined_regex, your_string)可能就是你要找的东西。

如果您打算在同一个程序中多次执行此操作,请考虑按如下方式编译正则表达式以获得更好的性能:

compiled = re.compile(combined_regex)
results = compiled.findall(your_string)

答案 1 :(得分:0)

如果我理解你是对的,你就是这样寻找smth:

import re

l_string="""gfrwrfr
gerqgeq
ERROR gferagqe
hello ERROR
smth more
more smth
Caused by: gferg
"""

pattern_strings =['[0-9" "-:A-Za-z].*ERROR.*Job run failed', 'Caused by:','^ *at','ERROR','more$']
pattern_string = '|'.join(pattern_strings)
pattern = re.compile(pattern_string)

for line in l_string.split("\n"):
    result = pattern.search(line)
    if result:
        print result.string

但是,当然,由于我们已经在线上循环,我们可以打印线而不是match_obj.string。

节目输出:

$  ./multiple_re.py
ERROR gferagqe
hello ERROR
smth more
Caused by: gferg

答案 2 :(得分:0)

使用multi_pattern_search。示例如下。

from multi_pattern_search import MultiPatternSearch

search = MultiPatternSearch()

search.add_keyword("foo")
search.add_keyword("bar")

print search.exist("apple tree foo john doe")

for k, v in search.count("apple tree foo bar foobar john doe").iteritems():
    print k, v