【发布时间】:2012-08-30 21:01:09
【问题描述】:
我有一些行为良好的 xml 文件,我想使用正则表达式重新格式化(不是解析!)。我们的目标是让每个 <trkpt> 对都成为单线。
以下代码有效,但我希望在单个正则表达式替换而不是循环中执行操作,因此我不需要将字符串连接回来。
import re
xml = """
<trkseg>
<trkpt lon="-51.2220657617" lat="-30.1072524581">
<time>2012-08-25T10:20:44Z</time>
<ele>0</ele>
</trkpt>
<trkpt lon="-51.2220657617" lat="-30.1072524581">
<time>2012-08-25T10:20:44Z</time>
<ele>0</ele>
</trkpt>
<trkpt lon="-51.2220657617" lat="-30.1072524581">
<time>2012-08-25T10:20:44Z</time>
<ele>0</ele>
</trkpt>
</trkseg>
"""
for trkpt in re.findall('<trkpt.*?</trkpt>', xml, re.DOTALL):
print re.sub('>\s*<', '><', trkpt, re.DOTALL)
也欢迎使用sed 回答。
感谢阅读
【问题讨论】:
-
你要的是
trkseg还是trkpt作为一行?您声明trkseg但您的正则表达式适用于trkpt... -
另外,我认为不管它是什么,都不可能有这种类型的嵌套标签?一旦你有嵌套,正则表达式将无法处理它。
-
如果这是你正在做的“又快又脏”的脚本,并且你不想解析 xml,我会说 for 循环比疯狂的正则表达式更简单,更易读.
-
@DragonWraith 对不起,错字,确实是 trkpt...
-
@AlexanderKondratskiy 虽然是QnD的工作,但我想利用业余时间学习正则表达式。这是挑战的一部分:o)
标签: python regex string-substitution