import re
regex = re.compile(r"""
^Traceback
[\s\S]+?
(?=^\[|\Z)
""", flags=re.MULTILINE | re.VERBOSE)
test_str = ("Started by upstream project \"run_script\" build number 435\n"
"originally caused by:\n"
" Started by user test\n"
"[Pipeline] {\n"
"[Pipeline] stage (Svnup)\n"
"Entering stage Svnup\n"
"+ python -m test.cli install 479CI9SOZ android://0.0.0.0:10000/479CI9SOZ /root/workspace/group/apk/com.data.app.apk - - false false\n"
"[03:21:33][DEBUG]<android> /root/env/common/test/test/core/android/adb/linux/adb -H 0.0.0.0 -P 10000 -s 479CI9SOZ wait-for-device\n"
"Traceback (most recent call last):\n"
" File \"/usr/lib/python2.7/runpy.py\", line 174, in _run_module_as_main\n"
" \"__main__\", fname, loader, pkg_name)\n"
" File \"/usr/lib/python2.7/runpy.py\", line 72, in _run_code\n"
" exec code in run_globals\n"
" File \"/root/env/common/test/test/cli/parser.py\", line 55, in main\n"
" run_script(args)\n"
" File \"/root/env/common/test/test/core/helper.py\", line 224, in wrapper\n"
" return f(pictarget, *args[1:], **opargs)\n"
" File \"/root/env/common/test/test/core/main.py\", line 408, in assert_exists\n"
" raise AssertionTimeout(\"%s does not exist in screen\" % v)\n"
"AssertionTimeout: MoaPic(group_login.owl/tpl1487844291185.png) does not exist in screen\n"
"EndOfStream\n"
"[03:23:18][DEBUG]<android> /root/env/common/test/test/core/android/adb/linux/adb -H 0.0.0.0 -P 10000 -s 479CI9SOZ forward --remove tcp:12671\n"
"+ python -m test.cli run 479CI9SOZ android://0.0.0.0:10000/479CI9SOZ /root/workspace/group/util/scripts/group_login.owl \n"
"rpc_uri: http://0.0.0.0:12708/jsonrpc/0\n"
"rpc_uri: http://0.0.0.0:12708/jsonrpc/0\n"
"Traceback (most recent call last):\n"
" File \"/usr/lib/python2.7/runpy.py\", line 174, in _run_module_as_main\n"
" \"__main__\", fname, loader, pkg_name)\n"
" File \"/usr/lib/python2.7/runpy.py\", line 72, in _run_code\n"
" exec code in run_globals\n"
" File \"/root/env/common/test/test/__main__.py\", line 5, in <module>\n"
" main()\n"
" File \"/root/env/common/test/test/cli/parser.py\", line 55, in main\n"
" run_script(args)\n"
" File \"/root/env/common/test/test/cli/runner.py\", line 124, in run_script\n"
" exec_script(args.script, scope=globals(), root=True)\n"
" File \"/root/env/common/test/test/cli/runner.py\", line 186, in exec_script\n"
" exec(compile(code, scriptpath, 'exec')) in scope\n"
" File \"/root/env/common/mator/mator/mator.py\", line 520, in start\n"
" raise IOError(\"RPC server not started!\")\n"
"IOError: RPC server not started!\n"
"[03:24:40][DEBUG]<android> /root/env/common/test/test/core/android/adb/linux/adb -H 0.0.0.0 -P 10000 -s 479CI9SOZ forward --remove tcp:12708\n"
"[03:26:41][DEBUG]<main> ->sift result: None\n"
"[03:26:41][DEBUG]<main> match result: None\n"
"Traceback (most recent call last):\n"
" File \"/usr/lib/python2.7/runpy.py\", line 174, in _run_module_as_main\n"
" \"__main__\", fname, loader, pkg_name)\n"
" File \"/usr/lib/python2.7/runpy.py\", line 72, in _run_code\n"
" exec code in run_globals\n"
" File \"/root/env/common/test/test/core/main.py\", line 195, in touch\n"
" pos = loop_find(v, timeout=timeout)\n"
" File \"/root/env/common/test/test/core/utils/logwraper.py\", line 70, in wrapper\n"
" res = f(*args, **kwargs)\n"
" File \"/root/env/common/test/test/core/cv.py\", line 83, in loop_find\n"
" raise NotFoundException('Picture %s not found in screen' % query)\n"
"test.core.error.NotFoundException: 'Picture MoaPic(group_login.owl/tpl1482311722698.png) not found in screen'\n"
"+ python -m test.cli stop_screen_record android://0.0.0.0:10000/479CI9SOZ 479CI9SOZ.mp4\n"
"ERROR: script returned exit code 1\n"
"Finished: FAILURE")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html