gpt4 book ai didi

python - 根据特殊规范将 1st|2nd|3rd|4th 生成句子到 XML

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:39 25 4
gpt4 key购买 nike

我想将这些句子转为 xml

I will meet you at 1st.
5th... OK, 5th?
today is 2nd\n
Aug.3rd

像这样:

<Text VAlign="top" VPosition="85.00">
I will meet you at 1<Font Script="super">st</Font>.
</Text>
<Text VAlign="top" VPosition="85.00">
5<Font Script="super">th</Font>... OK, 5<Font Script="super">th</Font>
</Text>
<Text VAlign="top" VPosition="85.00">
today is 2<Font Script="super">nd</Font>\n
</Text>
<Text VAlign="top" VPosition="85.00">
Aug.3<Font Script="super">rd</Font>\n
</Text>

我正在使用 minidom,但是在许多帖子和答案之后,我不介意用其他解析器重写我的代码。一开始我以为这个很简单,把 st|nd|rd|th 替换掉就可以了与

<Font Script="super">st|nd|rd|th</Font>然后使用这个新字符串 createTextNode() 。

但是,标志<, > and "结果是&lt; &gt; and $quot;通过 writexml() 方法。它适用于 XML 规范,但不利于阅读。

我该如何处理它?非常感谢。

最佳答案

您可以使用 xml.etree.ElementTree 执行以下操作来自标准库:

import re
import xml.etree.ElementTree as ET


data = """I will meet you at 1st.
5th... OK, 5th?
today is 2nd
Aug.3rd"""

endings = ['st', 'th', 'nd', 'rd']
pattern = re.compile('(%s)' % "|".join(endings))

root = ET.Element('root')
for line in data.split('\n'):
items = []
for item in re.split(pattern, line):
if item in endings:
items.append('<Font Script="super">%s</Font>' % item)
else:
items.append(item)
element = ET.fromstring("""<Text VAlign="top" VPosition="85.00">%s</Text>""" % ''.join(items))
root.append(element)

print ET.tostring(root)

它生成以下 xml:

<root>
<Text VAlign="top" VPosition="85.00">I will meet you at 1<Font Script="super">st</Font>.
</Text>
<Text VAlign="top" VPosition="85.00">5<Font Script="super">th</Font>... OK, 5<Font Script="super">th</Font>?
</Text>
<Text VAlign="top" VPosition="85.00">today is 2
<Font Script="super">nd</Font>
</Text>
<Text VAlign="top" VPosition="85.00">Aug.3
<Font Script="super">rd</Font>
</Text>
</root>

关于python - 根据特殊规范将 1st|2nd|3rd|4th 生成句子到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22895399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com