import re
regex = re.compile(r"(<(?P<tag1>\w+)>)\n(?'tag2'[\w\<\>.]+)\n<\/(?P=tag1)>", flags=re.MULTILINE)
test_str = ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n"
"<Annotations>\n"
"<Version>\n"
"1\n"
"</Version>\n"
"<Container>\n"
"<PageNumber>\n"
"1\n"
"</PageNumber>\n"
"<Size>\n"
"<Width>\n"
"3979.2\n"
"</Width>\n"
"<Height>\n"
"5611.2\n"
"</Height>\n"
"</Size>\n"
"<Offset>\n"
"<X>\n"
"0\n"
"</X>\n"
"<Y>\n"
"0\n"
"</Y>\n"
"</Offset>\n"
"<CalibrationScale>\n"
"1\n"
"</CalibrationScale>\n"
"<IsVisible>\n"
"true\n"
"</IsVisible>\n"
"<IsEnabled>\n"
"true\n"
"</IsEnabled>\n"
"<UserData>\n"
"</UserData>\n"
"<CalibrationUnit>\n"
"0\n"
"</CalibrationUnit>\n"
"<Objects>\n"
"<OnLoad>\n"
"<RotateAngle>\n"
"0\n"
"</RotateAngle>\n"
"<ScaleX>\n"
"1\n"
"</ScaleX>\n"
"<ScaleY>\n"
"1\n"
"</ScaleY>\n"
"<Offset>\n"
"<X>\n"
"0\n"
"</X>\n"
"<Y>\n"
"0\n"
"</Y>\n"
"</Offset>\n"
"</OnLoad>\n"
"<Object>\n"
"<ObjectType>\n"
"Leadtools.Annotations.Engine.AnnStampObject\n"
"</ObjectType>\n"
"<AssemblyName>\n"
"Leadtools.Annotations.Engine\n"
"</AssemblyName>\n"
"<OnLoad>\n"
"<RotateAngle>\n"
"0\n"
"</RotateAngle>\n"
"<ScaleX>\n"
"1\n"
"</ScaleX>\n"
"<ScaleY>\n"
"1\n"
"</ScaleY>\n"
"<Offset>\n"
"<X>\n"
"0\n"
"</X>\n"
"<Y>\n"
"0\n"
"</Y>\n"
"</Offset>\n"
"</OnLoad>\n"
"<IsVisible>\n"
"true\n"
"</IsVisible>\n"
"<IsSelected>\n"
"false\n"
"</IsSelected>\n"
"<IsLocked>\n"
"false\n"
"</IsLocked>\n"
"<Password>\n"
"</Password>\n"
"<GroupName/>\n"
"<Hyperlink/>\n"
"<FixedStateOperations>\n"
"8\n"
"</FixedStateOperations>\n"
"<RotateGripper>\n"
"240\n"
"</RotateGripper>\n"
"<RotateCenter>\n"
"<X>\n"
"NaN\n"
"</X>\n"
"<Y>\n"
"NaN\n"
"</Y>\n"
"</RotateCenter>\n"
"<Points>\n"
"<Point>\n"
"<X>\n"
"2400\n"
"</X>\n"
"<Y>\n"
"741.6\n"
"</Y>\n"
"</Point>\n"
"<Point>\n"
"<X>\n"
"4029.6\n"
"</X>\n"
"<Y>\n"
"741.6\n"
"</Y>\n"
"</Point>\n"
"<Point>\n"
"<X>\n"
"4029.6\n"
"</X>\n"
"<Y>\n"
"1380\n"
"</Y>\n"
"</Point>\n"
"<Point>\n"
"<X>\n"
"2400\n"
"</X>\n"
"<Y>\n"
"1380\n"
"</Y>\n"
"</Point>\n"
"</Points>\n"
"<Fill/>\n"
"<Labels>\n"
"<Label>\n"
"<Key>\n"
"AnnObjectName\n"
"</Key>\n"
"<IsVisible>\n"
"false\n"
"</IsVisible>\n"
"<LabelRestriction>\n"
"0\n"
"</LabelRestriction>\n"
"<Text/>\n"
"<OriginalPosition>\n"
"<X>\n"
"2400\n"
"</X>\n"
"<Y>\n"
"741.6\n"
"</Y>\n"
"</OriginalPosition>\n"
"<Offset>\n"
"<X>\n"
"NaN\n"
"</X>\n"
"<Y>\n"
"NaN\n"
"</Y>\n"
"</Offset>\n"
"<Background/>\n"
"<Foreground>\n"
"<SolidColorBrush>\n"
"<Color>\n"
"Transparent \n"
"</Color>\n"
"</SolidColorBrush>\n"
"</Foreground>\n"
"<Font>\n"
"<FamilyName>\n"
"Arial\n"
"</FamilyName>\n"
"<Size>\n"
"11\n"
"</Size>\n"
"<Stretch>\n"
"Normal\n"
"</Stretch>\n"
"<Weight>\n"
"Normal\n"
"</Weight>\n"
"<Style>\n"
"Normal\n"
"</Style>\n"
"<TextDecoration>\n"
"0\n"
"</TextDecoration>\n"
"</Font>\n"
"<OffsetHeight>\n"
"true\n"
"</OffsetHeight>\n"
"</Label>\n"
"</Labels>\n"
"<Stroke>\n"
"<Fill>\n"
"<SolidColorBrush>\n"
"<Color>\n"
"Transparent\n"
"</Color>\n"
"</SolidColorBrush>\n"
"</Fill>\n"
"<Thickness>\n"
"0\n"
"</Thickness>\n"
"<MiterLimit>\n"
"0\n"
"</MiterLimit>\n"
"<DashCap>\n"
"Flat\n"
"</DashCap>\n"
"<StartLineCap>\n"
"Round\n"
"</StartLineCap>\n"
"<EndLineCap>\n"
"Round\n"
"</EndLineCap>\n"
"<LineJoin>\n"
"Round\n"
"</LineJoin>\n"
"<DashOffset>\n"
"0\n"
"</DashOffset>\n"
"<Dashes/>\n"
"<StrokeAlignment>\n"
"Center\n"
"</StrokeAlignment>\n"
"</Stroke>\n"
"<SelectionStroke>\n"
"<Fill>\n"
"<SolidColorBrush>\n"
"<Color>\n"
"Blue\n"
"</Color>\n"
"</SolidColorBrush>\n"
"</Fill>\n"
"<Thickness>\n"
"4\n"
"</Thickness>\n"
"<MiterLimit>\n"
"0\n"
"</MiterLimit>\n"
"<DashCap>\n"
"Flat\n"
"</DashCap>\n"
"<StartLineCap>\n"
"Round\n"
"</StartLineCap>\n"
"<EndLineCap>\n"
"Round\n"
"</EndLineCap>\n"
"<LineJoin>\n"
"Round\n"
"</LineJoin>\n"
"<DashOffset>\n"
"0\n"
"</DashOffset>\n"
"<Dashes/>\n"
"<StrokeAlignment>\n"
"Center\n"
"</StrokeAlignment>\n"
"</SelectionStroke>\n"
"<Font>\n"
"<FamilyName>\n"
"Arial\n"
"</FamilyName>\n"
"<Size>\n"
"11\n"
"</Size>\n"
"<Stretch>\n"
"Normal\n"
"</Stretch>\n"
"<Weight>\n"
"Normal\n"
"</Weight>\n"
"<Style>\n"
"Normal\n"
"</Style>\n"
"<TextDecoration>\n"
"0\n"
"</TextDecoration>\n"
"</Font>\n"
"<ObjectId>\n"
"-16\n"
"</ObjectId>\n"
"<ObjectTag/>\n"
"<Metadata>\n"
"<Item>\n"
"<Key>\n"
"Subject\n"
"</Key>\n"
"<Value>\n"
"Annotate_1 \n"
"</Value>\n"
"</Item>\n"
"<Item>\n"
"<Key>\n"
"Author\n"
"</Key>\n"
"<Value>\n"
"Author1\n"
"</Value>\n"
"</Item>\n"
"<Item>\n"
"<Key>\n"
"Modified\n"
"</Key>\n"
"<Value>\n"
"2021-03-04 21:50:12\n"
"</Value>\n"
"</Item>\n"
"<Item>\n"
"<Key>\n"
"Title\n"
"</Key>\n"
"<Value>\n"
"cvadmin \n"
"</Value>\n"
"</Item>\n"
"<Item>\n"
"<Key>\n"
"Content\n"
"</Key>\n"
"<Value>\n"
"SIGN_cvadmin 3/4/2021 9:49:54 PM\n"
"</Value>\n"
"</Item>\n"
"<Item>\n"
"<Key>\n"
"Created\n"
"</Key>\n"
"<Value>\n"
"2021-03-04 21:50:12\n"
"</Value>\n"
"</Item>\n"
"</Metadata>\n"
"<Reviews/>\n"
"<UserId/>\n"
"<LayerId/>\n"
"<Opacity>\n"
"1\n"
"</Opacity>\n"
"<Picture>\n"
"<PictureData>\n"
"Null\n"
"</PictureData>\n"
"<PictureSource>\n"
"D:/GitLeadtools20And21MergedWorkSpace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/CVWeb/Temp/Apurba DB/272/12102/2.png\n"
"</PictureSource>\n"
"<PictureWidth>\n"
"4710.973077661264\n"
"</PictureWidth>\n"
"<PictureHeight>\n"
"1295.5175963568474\n"
"</PictureHeight>\n"
"</Picture>\n"
"</Object>\n"
"</Objects>\n"
"</Container>\n"
"</Annotations>")
subst = "<${tag1}>\\n\\t${tag2}\\n</${tag1}>"
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