我是Python的新手,并且一直在尝试查找匹配多个模式的所有字符串。我做了一些谷歌搜索,发现了一些建议将所有模式编译成一个的帖子。但是他们使用的re.search()
函数只返回第一个匹配的实例。我需要按照它们出现的顺序搜索匹配任何模式的所有字符串实例。欢迎任何方向/建议。
更具体地说,我正在寻找类似于这个grep命令的东西
grep -i "[0-9' '-:A-Za-z].* ERROR.*Job failed\|Caused by:\|^ *at\|ERROR\|more$" <file-name>
答案 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