python根据标签搜索

1 投票
3 回答
2998 浏览
提问于 2025-04-16 00:25

我需要一些关于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
  1. 把文本文件的内容加载到一个字符串里。
  2. pos1 = s.find('<concept>') 在这个字符串中查找第一次出现的 <concept>
  3. 接着,用 pos2 = s.find('</concept>', pos1) 查找 </concept> 的位置,注意要从刚才找到的 <concept> 后面开始查。

你要找的内容就是 s[pos1+len('<concept>'):pos2] 这个部分。

撰写回答