【问题标题】:Whats the regular expression for finding string between > and <在 > 和 < 之间查找字符串的正则表达式是什么
【发布时间】:2012-01-22 06:44:30
【问题描述】:

我有一个 HTML 文件

 ...<b>Breakfast</b><hr>...

我想要Breakfast,它介于&gt; 和&lt; 之间。

我试过了

...for test_string in line:
        if re.match(r'(>.*<$)',test_string):...

那也没有给&gt;Breakfast&lt;。

谢谢。

【问题讨论】:

标签: python regex xml-parsing


【解决方案1】:

一般正则表达式无法解析html。您可以改用 html 解析器:

from BeautifulSoup import BeautifulSoup # pip install BeautifulSoup

html = """...<b>Breakfast</b><hr>..."""

soup = BeautifulSoup(html)
print soup(text=True) # get all text
# -> [u'...', u'Breakfast', u'...']
print [b.text for b in soup('b')] # get all text for <b> tags
# -> [u'Breakfast']

【讨论】:

    【解决方案2】:

    $ 表示“输入结束”,不属于此正则表达式。

    相反,请执行以下操作:

    m = re.search(r'>([^<]*)<', test_string)
    if m:
        print m.group(1)
    

    这会搜索&gt;,然后是所有不是&lt; 的字符,然后是&lt;。 &gt; 和 &lt; 之间的字符被标记为一个组,您可以使用 m.group(1) 获得该组

    【讨论】:

    • 在这个用例中[^&lt;]*&lt; 比.*?&lt; 好多少?当然,它们在内部被翻译成相同的代码。
    • 这很有趣;一个实际上更有效吗?
    • @kindall,是的,[^&lt;]* 的效率稍高一些 pastebin.com/jNArurPw
    【解决方案3】:

    我想你想要:

    r'(>.*?<)'
    

    或许

    r'<b(>.*?<)/b>'
    

    是非贪婪的,匹配字符串的中间。请注意,parsing HTML with regular expressions 不是很健壮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多