import re
regex = re.compile(r"interface (\w+)(\s+){([?\w\s\d:;()\[\]=>\.]*)};", flags=re.MULTILINE)
test_str = ("/**\n"
" * Analytic instance returned from initialization\n"
" * @property identify - Identify a user\n"
" * @property track - Track an analytics event\n"
" * @property page - Trigger page view\n"
" * @property user - Get user data\n"
" * @property reset - Clear information about user & reset analytics\n"
" * @property ready - Fire callback on analytics ready event\n"
" * @property on - Fire callback on analytics lifecycle events.\n"
" * @property once - Fire callback on analytics lifecycle events once.\n"
" * @property getState - Get data about user, activity, or context.\n"
" * @property storage - storage methods\n"
" * @property plugins - plugin methods\n"
" */ \n"
"export interface AnalyticsInstance {\n"
" identify: Identify;\n"
" track: Track;\n"
" page: Page;\n"
" user: User;\n"
" reset: Reset;\n"
" ready: Ready;\n"
" on: On;\n"
" once: Once;\n"
" getState: GetState;\n"
" storage: Storage;\n"
" plugins: Plugins;\n"
" };\n\n"
"interface AnalyticsPluginBase {\n"
" name: string;\n"
" EVENTS?: any;\n"
" config?: any;\n"
" initialize?: (...params: any[]) => any;\n"
" page?: (...params: any[]) => any;\n"
" track?: (...params: any[]) => any;\n"
" identify?: (...params: any[]) => any;\n"
" loaded?: (...params: any[]) => any;\n"
" ready?: (...params: any[]) => any;\n"
"};")
subst = "interface $1$2{$3}"
result = regex.sub(subst, test_str)
if result:
print(result)
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