XML regex Python

XML regex Python

XML stands for Extensible Markup Language and is used for storing arbitrary data. Usually, it’s not a good thing to parse XML with regular expressions, but in certain situations, it can be very helpful to retrieve (scrape) a specific piece of information that you need.

Extract value between XML tags

One of the most common operations with XML and regex is the extraction of the text between certain tags (a.k.a. scraping). For this operation, the following regular expression can be used.

"(?:<from.*?>)(.*?)(?:<\\/from>)"

Test it!
/(?:<TAG.*?>)(.*?)(?:<\/TAG>)/g

True

False

Enter a text in the input above to see the result

Example code in Python:

# Extract text between specific XML tag
xml_pattern = "(?:<from.*?>)(.*?)(?:<\\/from>)"
re.findall(xml_pattern, '<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don\'t forget me this weekend!</body></note>') # returns ['Jani']

Test it!

True

False

Enter a text in the input above to see the result

Test it!

True

False

Enter a text in the input above to see the result

Notes on regex XML extraction

While this extraction might be a good option in some cases, usually it’s better to use specific XML parsers for such tasks. In such case, once XML is validated and parsed, the required information can be retrieved using Document queries. For instance, in Python the following code can be used:

import xml.etree.ElementTree as ET
tree = ET.fromstring('<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don\'t forget me this weekend!</body></note>')
all_from_elements = tree.findall('.//from')
all_from_elements[0].text