import re
regex = re.compile(r"""
^
#whitespace
([ ]*)
(?:
# Error position - line location
(-{6,})([\^])
|
# Line number
([\d]+)
# Line number delim
([\|])
# Code indent
([ \t]*)
(?:
# Comment ?
([\/]{2}.+)?
|
# Else code block line
(.*)
)
$
)
|
# Function delim token
(at +)
# Function
(.+?)
# (, Path base
([\(].+?)
# File
([^\/]+?)
# Line:char
(?:(:)(\d+))?
(?:(:)(\d+))?
# Function path
([\)])
""", flags=re.MULTILINE | re.VERBOSE)
test_str = (" watching /Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/functions/index.styl\n"
"ParseError: inject/code-custom.styl:125:44\n"
" 121| else\n"
" 122| // Add room for window controls\n"
" 123| body.mac \n"
" 124| // Only target first tab bar\n"
" 125| [data-keybinding-context=\"1\"] .tabs-and-actions-container\n"
"---------------------------------------------------^\n"
" 126| & .tabs-and-actions-container\n"
" 127| padding-left: 9em\n"
" 128| & .dragging-area-left-padding\n\n"
"expected \":\", got \")\"\n\n"
" at Parser.error (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:259:11)\n"
" at Parser.expect (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:287:12)\n"
" at Parser.ternary (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:1964:12)\n"
" at Parser.negation (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:1953:17)\n"
" at Parser.expression (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:1932:24)\n"
" at Parser.ternary (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:1963:27)\n"
" at Parser.negation (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:1953:17)\n"
" at Parser.expression (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:1932:24)\n"
" at Parser.primary (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:2250:23)\n"
" at Parser.member (/Users/disk0/.nvm/versions/node/v13.2.0/lib/node_modules/stylus/lib/parser.js:2174:21)\n"
" compiled inject/FontLoad.css\n"
" watching inject/FontLoad.styl\n")
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