繁体   English   中英

Python-匹配的正则表达式” <textarea></textarea> ”以及它们之间的任何东西

[英]Python- Regular expression to match“ <textarea> </textarea> ” and anything between them

如果文字是

<textarea> xyz asdf qwr </textarea>

我正在尝试编写一个正则表达式,这将有助于我以粗体提取文本。

到目前为止,我已经到达了[(<textarea)][</textarea>)] ,它将捕获标签,但是我实际上无法捕获两个标签之间的文本。

我也尝试过[(<textarea)]+.[</textarea>)]甚至[[(<textarea)]+.[</textarea>)]但那也没有给出正确的结果。

有人可以对此发表一些看法或分享一些链接来帮助我找到解决方案吗?

是否有特定的原因必须使用正则表达式来解析看起来像HTML的东西? 我不会的 有关最佳说明,请参见RegEx匹配开放标签,但XHTML自包含标签除外

如果使用BeautifulSoup模块,这将变得非常简单,它在解析HTML(尤其是凌乱的HTML)时会更好。

import bs4

f = open("test.html")
soup = bs4.BeautifulSoup(f)

for textarea in soup.find_all('textarea'):
    print textarea.get_text()

您不应该使用正则表达式解析HTML-使用HTML解析器解析HTML! 看到这个答案

话虽如此,如果您必须使用正则表达式::

方括号[]表示“匹配内部的任何字符”,因此[<(textarea)]表示“匹配<,(,t,e,x,t,a,r或)”。

您可能希望<textarea>(.*?)</textarea> ,其中组1(第一组括号)是标签的内容。

例如,如果用户在文"</textarea>"写入"</textarea>"则会出现问题。 那么最多只能提取到"</textarea>"的第一次出现。 但是,如果您将其设置为非贪婪并执行<textarea>.*</textarea>则如果您有多个textarea标签,则.*会匹配两个标签,而不是单独匹配。 这就是将正则表达式与HTML结合使用的陷阱。

我认为您很难理解“ +”和“ *”运算符是指它们遵循的模式,而不是它们所遵循的模式。

>>> import re
>>> re.match(r"\<textarea\>.*\<textarea/\>", target)
>>> re.match(r"\<textarea\>.*\</textarea>", target)
<_sre.SRE_Match object at 0x106528b90>
>>> mo = re.match(r"\<textarea\>.*\</textarea>", target)
>>> mo.groups()
()
>>> mo.group(0)
'<textarea> xyz asdf qwr </textarea>'
>>> mo = re.match(r"\<textarea\>(.*)\</textarea>", target)
>>> mo.groups()
(' xyz asdf qwr ',)
>>> mo.group(0)
'<textarea> xyz asdf qwr </textarea>'
>>> mo.group(1)
' xyz asdf qwr '
>>>

有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM