我有一个文本,其中只使用了<b>
和</b>
。例如<b>abcd efg-123</b>
。我可以在这些标签之间提取字符串吗?我还需要在这个<b>abcd efg-123</b>
字符串之前和之后提取3个单词。
我怎样才能做到这一点?什么是合适的正则表达式?
答案 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)
答案 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.
上面链接的文章实际上为您的问题提供了一个正则表达式 - 但不使用它。