python根据标签搜索
我需要一些关于Python编程的帮助:
我想要一个命令,可以从一个文本文件中搜索所有在标签之间的词。
比如在这个文本文件里有<concept> food </concept>
。我想要找到所有在<concept>
和</concept>
之间的词,并把它们显示出来。
有没有人能帮帮我……
3 个回答
1
看看正则表达式吧。 http://docs.python.org/library/re.html
如果你想找比如说 <i>
这个标签,可以试试下面的代码:
text = "text to search. <i>this</i> is the word and also <i>that</i> end"
import re
re.findall("<i>(.*?)</i>",text)
这里简单解释一下 findall 是怎么工作的:它会在给定的字符串中查找符合某个正则表达式的内容。这个正则表达式是 <i>(.*?)</i>
:
<i>
代表的是开头的标签<i>
(.*?)
创建了一个组,并且会尽可能多地匹配内容,直到遇到第一个</i>
,这个标签表示结束
注意,上面的解决方案不会匹配像下面这样的内容:
<i> here's a line
break </i>
因为你只是想提取 单词。
不过,当然也可以做到这一点:
re.findall("<i>(.*?)</i>",text,re.DOTALL)
3
有一个很棒的库叫做 BeautifulSoup,专门用来处理HTML和XML文件。使用这个库,你可以很方便地浏览和操作这些文件中的内容。
from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup(open('myfile.xml', 'rt').read())
for t in soup.findAll('concept'):
print t.string
3
- 把文本文件的内容加载到一个字符串里。
- 用
pos1 = s.find('<concept>')
在这个字符串中查找第一次出现的<concept>
。 - 接着,用
pos2 = s.find('</concept>', pos1)
查找</concept>
的位置,注意要从刚才找到的<concept>
后面开始查。
你要找的内容就是 s[pos1+len('<concept>'):pos2]
这个部分。