import re
regex = re.compile(r"<thing Class=\"Building(?:_[^\"]*)?\">(?:\R.*){2}\R.*\(.*,\h*\K104(?=\))", flags=re.MULTILINE)
test_str = ("58 <thing Class=\"Plant\">\n"
"59 <def>Plant_TreeOak</def>\n"
"60 <id>Plant_TreeOak41339</id>\n"
"61 <pos>(100, 0, 105)</pos>\n"
"62 </thing>\n"
"63 <thing Class=\"Building\">\n"
"64 <def>Wall</def>\n"
"65 <id>Wall28005</id> \n"
"66 <pos>(101, 0, 105)</pos>\n"
"68 </thing>\n"
"69 <thing Class=\"Building\">\n"
"70 <def>Wall</def>\n"
"71 <id>Wall29667</id>\n"
"72 <pos>(103, 0, 105)</pos>\n"
"74 </thing>\n"
"75 <thing Class=\"Building\">\n"
"76 <def>Wall</def>\n"
"77 <id>Wall28005</id>\n"
"78 <pos>(101, 0, 104)</pos>\n"
"80 </thing>\n"
"81 <thing Class=\"Building_Door\">\n"
"82 <def>Door</def>\n"
"83 <id>Door642106</id>\n"
"84 <pos>(102, 0, 104)</pos>\n"
"86 </thing>\n"
"87 <thing Class=\"Building\">\n"
"88 <def>Wall</def>\n"
"89 <id>Wall29667</id>\n"
"90 <pos>(103, 0, 104)</pos>\n"
"92 </thing>\n"
"93 <thing Class=\"Plant\">\n"
"94 <def>Plant_Grass</def>\n"
"95 <id>Plant_Grass203219</id>\n"
"96 <pos>(104, 0, 104)</pos>\n"
"97 </thing>")
subst = "103"
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