Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取标记属性以匹配正则表达式中的内部单词_Python_Html_Regex - Fatal编程技术网

Python 获取标记属性以匹配正则表达式中的内部单词

Python 获取标记属性以匹配正则表达式中的内部单词,python,html,regex,Python,Html,Regex,我需要从一个标记中获取一个特定的属性值,该标记的内部单词与我的查询单词匹配。例如,考虑一个目标HTML/ 其他单词 词对词匹配 一些别的词 现在,我需要从标记的data attr属性中获取“required”值,该标记的内部单词(在本例中为word_to_match)与我的查询单词匹配 问题是我正在编写的正则表达式也返回了其他跨度。在这种情况下,我无法生成一个非贪婪的正则表达式 如果有帮助的话,我会用python来做这件事,请不要使用“此处不使用正则表达式”的解决方案。使用字符串替换为正则表达

我需要从一个标记中获取一个特定的属性值,该标记的内部单词与我的查询单词匹配。例如,考虑一个目标HTML/

其他单词
词对词匹配
一些别的词
现在,我需要从标记的data attr属性中获取“required”值,该标记的内部单词(在本例中为word_to_match)与我的查询单词匹配

问题是我正在编写的正则表达式也返回了其他跨度。在这种情况下,我无法生成一个非贪婪的正则表达式


如果有帮助的话,我会用python来做这件事,请不要使用“此处不使用正则表达式”的解决方案。

使用字符串替换为正则表达式和输出组(javascript语法,但我希望python有类似的功能)怎么样


str.replace(/data attr=“([^”]*)”[^>]*>[^用正则表达式解析网站不是一个好主意。您可以使用BeautifulSoup。它既可靠又高效:

>>>from bs4 import BeautifulSoup

>>>soup = BeautifulSoup("""
    <span data-attr="something" attr1="" ><i>other_word</i></span>
    <span data-attr="required" attr1="" ><i>word_to_match</i></span>
    <span data-attr="something1" attr1="" ><i>some_other_word</i></span>""")

>>>[x.attrs['data-attr'] for x in soup.select('span') if 'word_to_match' in str(x)][0]
'required'
>>来自bs4导入组
>>>汤=美汤
换句话说
词对词匹配
一些(另一个词“))
>>>[x.attrs['data-attr']表示汤中的x。如果str(x)中的'word_to_match',请选择('span')[0]
“必需的”

为什么没有HTML解析器解决方案?家庭作业?:)你看,如果你需要一个用于HTML输入的正则表达式解决方案,你必须解释原因。这样的答案会被否决,因此,我(通常)会离开从回答这些问题开始。你是在搜索单个正则表达式还是可以将其分为两个步骤?好的,我将发表评论:。但这取决于你决定如何处理它。正如我所说,在我需要解决这个问题的上下文中,我们不能使用像pyQuery这样的外部模块。。因此正则表达式。@scorreia欢迎任何解决方案。。。如果这些跨距被父跨距吞没怎么办?只需要选择特定的跨距。无法保证是否存在父跨距元素。这在网页中是不寻常的………构造。在任何情况下,BeautifulSoup功能都可以处理它,只需更多信息。
>>>from bs4 import BeautifulSoup

>>>soup = BeautifulSoup("""
    <span data-attr="something" attr1="" ><i>other_word</i></span>
    <span data-attr="required" attr1="" ><i>word_to_match</i></span>
    <span data-attr="something1" attr1="" ><i>some_other_word</i></span>""")

>>>[x.attrs['data-attr'] for x in soup.select('span') if 'word_to_match' in str(x)][0]
'required'