【发布时间】:2013-04-24 20:26:27
【问题描述】:
我正在搜索一个看起来像这样的 OPML 文件。我想提取大纲文本和 xmlUrl。
<outline text="lol">
<outline text="Discourse on the Otter" xmlUrl="http://discourseontheotter.tumblr.com/rss" htmlUrl="http://discourseontheotter.tumblr.com/"/>
<outline text="fedoras of okc" xmlUrl="http://fedorasofokc.tumblr.com/rss" htmlUrl="http://fedorasofokc.tumblr.com/"/>
</outline>
我的功能:
import re
rssName = 'outline text="(.*?)"'
rssUrl = 'xmlUrl="(.*?)"'
def rssSearch():
doc = open('ttrss.txt')
for line in doc:
if "xmlUrl" in line:
mName = re.search(rssName, line)
mUrl = re.search(rssUrl, line)
if mName is not None:
print mName.group()
print mUrl.group()
但是,返回值如下:
outline text="fedoras of okc"
xmlUrl="http://fedorasofokc.tumblr.com/rss"
什么是 rssName 和 rssUrl 的正确正则表达式,以便我只返回引号之间的字符串?
【问题讨论】:
-
与您的问题完全无关,但可能仍然有帮助:您可以预编译正则表达式以节省几纳秒的执行时间。使用
rssName = re.compile('outline text="(.*?)"')和mName = rssName.search(line)。 -
你为什么要通过正则表达式来做到这一点?这不是正确的工具。使用xml解析器,标准库里有好几种。
-
关于@DanielRoseman 的建议,如果您想要一些易于使用的东西,包括厨房水槽,请查看美丽的石头汤,美丽汤库的 XML 解析组件。