import re
regex = re.compile(r"^(♪\h+[A-Za-z].*?(?:\R[A-Za-z].*?)?)♪?$", flags=re.MULTILINE)
test_str = ("==============================\n"
"BEFORE\n"
"==============================\n"
"400\n"
"00:31:44,633 --> 00:31:45,716\n"
"Come on.\n\n"
"401\n"
"00:31:59,940 --> 00:32:02,399\n"
"Caleb used to do that\n"
"when he ate.\n\n"
"402\n"
"00:32:03,902 --> 00:32:05,069\n"
"Pull my hair like that.\n\n"
"410\n"
"00:32:46,653 --> 00:32:48,654\n"
"♪ Saying</i>\n\n"
"411\n"
"00:32:48,738 --> 00:32:52,241\n"
"♪ This is my message to you</i>\n\n"
"412\n"
"00:32:56,163 --> 00:32:57,538\n"
"♪ Don't worry</i>\n\n"
"636\n"
"00:55:59,545 --> 00:56:02,296\n"
"♪ You don't own me\n\n"
"637\n"
"00:56:02,798 --> 00:56:06,676\n"
"♪ I'm not just\n"
"one of your many toys\n\n"
"638\n"
"00:56:06,969 --> 00:56:09,929\n"
"♪ You don't own me\n\n"
"639\n"
"00:56:10,347 --> 00:56:16,394\n"
"♪ Don't say\n"
"I can't go with other boys\n\n"
"640\n"
"00:56:16,728 --> 00:56:20,106\n"
"♪ And don't tell me\n"
"what to do\n\n"
"641\n"
"00:56:20,816 --> 00:56:24,026\n"
"♪ Don't tell me what to say ♪\n\n"
"642\n"
"00:56:24,278 --> 00:56:27,822\n"
"♪ And please,\n"
"when I go out with you ♪\n\n"
"643\n"
"00:56:28,365 --> 00:56:31,742\n"
"♪ Don't put me on display ♪\n\n"
"644\n"
"00:56:31,952 --> 00:56:36,080\n"
"♪ 'Cause you don't own me ♪")
subst = "$1 ♪"
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