是否有人就如何制作正则表达式以查找<time>
和</time>
中的所有字符串有一些指导?以下代码中有3种情况。我必须使用正则表达式在列表中的时间和/时间之间返回3个字符串。
<tabular>
<time from="2015-09-23T23:00:00" to="2015-09-24T00:00:00" period="3">
<!-- Valid from 2015-09-23T23:00:00 to 2015-09-24T00:00:00 -->
<symbol number="4" numberEx="4" name="Cloudy" var="04" />
<precipitation value="0" />
<!-- Valid at 2015-09-23T23:00:00 -->
<windDirection deg="118.5" code="ESE" name="East-southeast" />
<windSpeed mps="1.2" name="Light air" />
<temperature unit="celsius" value="12" />
<pressure unit="hPa" value="1010.4" />
</time>
<time from="2015-09-24T00:00:00" to="2015-09-24T06:00:00" period="0">
<!-- Valid from 2015-09-24T00:00:00 to 2015-09-24T06:00:00 -->
<symbol number="4" numberEx="4" name="Cloudy" var="04" />
<precipitation value="0" />
<!-- Valid at 2015-09-24T00:00:00 -->
<windDirection deg="94.7" code="E" name="East" />
<windSpeed mps="1.9" name="Light breeze" />
<temperature unit="celsius" value="12" />
<pressure unit="hPa" value="1010.4" />
</time>
<time from="2015-09-24T06:00:00" to="2015-09-24T12:00:00" period="1">
<!-- Valid from 2015-09-24T06:00:00 to 2015-09-24T12:00:00 -->
<symbol number="4" numberEx="4" name="Cloudy" var="04" />
<precipitation value="0" minvalue="0" maxvalue="0.3" />
<!-- Valid at 2015-09-24T06:00:00 -->
<windDirection deg="122.9" code="ESE" name="East-southeast" />
<windSpeed mps="2.6" name="Light breeze" />
<temperature unit="celsius" value="12" />
<pressure unit="hPa" value="1009.3" />
</time>
</tabular>
答案 0 :(得分:2)
它是一个xml文件,因此不使用正则表达式,为什么不使用XPATH
。您可以使用名为lxml
的python库来支持XPATH
语言。我不知道您的确切用例,但示例代码应该是: -
from lxml import etree
xml_doc = etree.fromstring(xml_string) # assuming xml_string is xml_content
xpath_expression = '/tabular/time/text()' # change it according to your use case
data = xml_doc.xpath(xpath_expression)
答案 1 :(得分:1)
这将获取每个时间元素的内容,如下所示:
re.findall("<time[^>]*>(.*?)<\/time>",xmldata, re.DOTALL)
我仍然建议使用正则表达式的XML库。
如果您也想要time
个元素,请使用:
re.findall("<time[^>]*>.*?<\/time>",xmldata, re.DOTALL)
答案 2 :(得分:1)
使用lxml:
from lxml import etree
xmlString = '''<tabular>
...'''
tree = etree.fromstring(xmlString)
res = []
for timeNd in tree.xpath('//tabular/time'):
res.append(''.join([etree.tostring(node) for node in timeNd]))
print(res)
XPath查询//tabular/time
选择所有time
个节点,然后为每个节点连接子节点字符串,并将结果字符串附加到列表res
。
答案 3 :(得分:0)
试试这个
re.findall(r'<time[^>]*>.*?<\/time>', 'XMLSTRING', re.DOTALL)
答案 4 :(得分:0)
答案 5 :(得分:0)
它无法完成,因为XML不是常规语言(这是计算机科学中的技术术语)。任何尝试都会捕获一些你不想捕获的字符串(例如,旨在混淆你的正则表达式匹配器的XML注释),或者无法捕获一些你应该匹配的字符串(例如,在你所做的地方包含注释的元素) #39; t期待他们)。要处理XML,请始终使用XML解析器。