使用Python的正则表达式在文本中查找字符串

时间:2010-10-20 13:42:37

标签: python regex parsing

我有一个文本,其中只使用了<b></b>。例如<b>abcd efg-123</b>。我可以在这些标签之间提取字符串吗?我还需要在这个<b>abcd efg-123</b>字符串之前和之后提取3个单词。 我怎样才能做到这一点?什么是合适的正则表达式?

4 个答案:

答案 0 :(得分:3)

这将获得标签之间的内容,

>>> s="1 2 3<b>abcd efg-123</b>one two three"
>>> for i in s.split("</b>"):
...   if "<b>" in i:
...      print i.split("<b>")[-1]
...
abcd efg-123

答案 1 :(得分:1)

这实际上是一个非常愚蠢的版本,不允许嵌套标签。

re.search(r"(\w+)\s+(\w+)\s+(\w+)\s+<b>([^<]+)</b>\s+(\w+)\s+(\w+)\s+(\w+)", text)

See Python documentation

答案 2 :(得分:1)

处理<b>内的标记,除非它们是<b>

import re    
sometext = 'blah blah 1 2 3<b>abcd efg-123</b>word word2 word3 blah blah'
result = re.findall(
      r'(((?:(?:^|\s)+\w+){3}\s*)'            # Match 3 words before
      r'<b>([^<]*|<[^/]|</[^b]|</b[^>])</b>'  # Match <b>...</b>
      r'(\s*(?:\w+(?:\s+|$)){3}))', sometext) # Match 3 words after

result == [(' 1 2 3<b>abcd efg-123</b>word word2 word3 ',
    ' 1 2 3',
    'abcd efg-123',
    'word word2 word3 ')]

这应该可行,并且表现良好,但如果它变得更高级,那么你应该考虑使用html解析器。

答案 3 :(得分:0)

您不应该使用正则表达式进行HTML解析。 That way madness lies.

上面链接的文章实际上为您的问题提供了一个正则表达式 - 但使用它。