import re
regex = re.compile(r"""
[*][(][\s]*[(\s]*.*[*][)\s]*(.*)\s*[)]\s*=(.*)[\s]*;
""", flags=re.IGNORECASE | re.VERBOSE)
test_str = (" (*((volatile unsigned short*)(type01_01_06_base + (type01_01_06_offset * 1))) = (unsigned short)(unsigned long)0x01010101);\n"
" (*((volatile unsigned short*)(type01_01_06_base + (type01_01_06_offset * 2))) = (unsigned short)(unsigned long)0x01000100);\n\n"
"(*((volatile unsigned char*)add)) = (unsigned char)data;\n\n"
"(*((volatile unsigned short*)add)) = (unsigned short)data;\n\n"
"(*((volatile unsigned long*)add)) = (unsigned long)data;\n\n\n"
" \n"
" *((volatile unsigned char*)0x01010004) = (unsigned char)0x01;\n"
" *((volatile unsigned char*)0x01010008) = (unsigned char)0x00;\n\n"
" *((volatile unsigned short*)0x01020004) = (unsigned short)0x0100;\n"
" *((volatile unsigned short*)0x01020008) = (unsigned short)0x0000;\n\n"
" *((volatile unsigned long*)(0x01030000 + 0x04)) = (unsigned long)0x00010000;\n"
" *((volatile unsigned long*)(0x01030000 + 0x08)) = (unsigned long)0x00000000;\n\n"
" (*((volatile unsigned char*)type01_01_04o_add) = (unsigned char)(unsigned char)0xA5);\n\n"
" (*((volatile unsigned char*)type01_01_04n_add) = (unsigned char)(unsigned char)0x5A);\n\n"
" (*((volatile unsigned short*)(type01_01_05_base + type01_01_05o_offset)) = (unsigned short)(unsigned short)0x0101);\n"
" (*((volatile unsigned short*)(type01_01_05_base + type01_01_05n_offset)) = (unsigned short)(unsigned short)0x0100);\n\n\n\n\n"
" *((volatile unsigned char*)0x02010004) = (unsigned char)0x04;\n"
" *((volatile unsigned char*)0x02010008) = (unsigned char)0x05;\n\n"
" *((volatile unsigned short*)0x02020004) = (unsigned short)0x0400;\n"
" *((volatile unsigned short*)0x02020008) = (unsigned short)0x0500;\n\n"
" *((volatile unsigned long*)0x02030004) = (unsigned long)(0x00030000 + 0x00010000);\n"
" *((volatile unsigned long*)0x02030008) = (unsigned long)(0x00030000 + 0x00020000);\n\n"
" (*((volatile unsigned char*)0x02040004) = (unsigned char)(unsigned char)(0x0A - 0x02));\n"
" (*((volatile unsigned char*)0x02040008) = (unsigned char)(unsigned char)(0x0A - 0x01));\n\n"
" (*((volatile unsigned short*)0x02050004) = (unsigned short)(unsigned short)(0x0001 << 11));\n"
" (*((volatile unsigned short*)0x02050008) = (unsigned short)(unsigned short)(0x0001 << 12));\n\n"
" (*((volatile unsigned long*)0x02060004) = (unsigned long)(unsigned long)(0x80000000 | 0x00080000));\n"
" (*((volatile unsigned long*)0x02060008) = (unsigned long)(unsigned long)(0x80000000 | 0x00800000));\n\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