Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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_Regex_Python 3.x_Beautifulsoup - Fatal编程技术网

Python 靓汤

Python 靓汤,python,regex,python-3.x,beautifulsoup,Python,Regex,Python 3.x,Beautifulsoup,我对靓汤有意见。特别是使用.find方法。有没有一种方法可以让它广泛匹配而不是精确匹配?现在,只有找到“第一个”和“最后一个”时,它才有效 soup.find("a", string="First Last").get('href') 我想让它找到这两个单词的任意一个组合,有没有大写字母。所以它会发现 First first Last first last last something something last etc.. 谢谢你的帮助 的文档深入解释了许多选项。(请确保至少继续阅读本节

我对靓汤有意见。特别是使用.find方法。有没有一种方法可以让它广泛匹配而不是精确匹配?现在,只有找到“第一个”和“最后一个”时,它才有效

soup.find("a", string="First Last").get('href')
我想让它找到这两个单词的任意一个组合,有没有大写字母。所以它会发现

First
first
Last first
last last
something something last
etc..
谢谢你的帮助

的文档深入解释了许多选项。(请确保至少继续阅读本节后面的
find_all()
name
和关键字参数部分;这是您将找到最佳示例的地方。)

您使用的仅与以下内容完全匹配:

最简单的过滤器是字符串。将字符串传递给搜索方法,Beautiful Soup将对该字符串执行匹配


但您可以使用,例如:

如果传入正则表达式对象,Beauty Soup将使用其search()方法对该正则表达式进行过滤


…或:

如果其他匹配项都不适用于您,请定义一个将元素作为其唯一参数的函数。如果参数匹配,函数应返回True,否则返回False

您还可以编写一个接受整个标记的函数,而不仅仅是它的
字符串
,如果这是一个问题,它可以更灵活地处理由意外标记引起的错误


您没有非常清楚地指定您想要的确切规则是什么,也没有给我们提供一个完整的示例进行测试,因此我不能保证正则表达式或函数实际上能够完全满足您的要求。下面是一个例子:

>>> h =  '<a>first</a> <a>last first</a> <a>something something last</a> <a>larst fist</a> <p>First Last</p>'
>>> soup = BeautifulSoup(h, 'lxml')
>>> soup.find_all("a", string=re.compile(r'(?i)(first|last)'))
[<a>first</a>, <a>last first</a>, <a>something something last</a>]
>>> soup.find_all("a", string=matches_firstlast)
[<a>first</a>, <a>last first</a>, <a>something something last</a>]
>>h='first last first某物last last firstfirst last

' >>>汤=美汤(h,'lxml') >>>soup.find_all(“a”,string=re.compile(r'(?i)(first'last')) [第一,最后第一,最后一件事] >>>soup.find_all(“a”,string=matches_firstlast) [第一,最后第一,最后一件事]

希望这和文档足以编写您需要的任何代码。

您能提供您正在处理的页面的一小部分,以便对其执行一些测试吗?
def matches_firstlast(s):
    lower = s.casefold()
    return 'first' in lower or 'last' in lower
soup.find("a", string=matches_firstlast)
>>> h =  '<a>first</a> <a>last first</a> <a>something something last</a> <a>larst fist</a> <p>First Last</p>'
>>> soup = BeautifulSoup(h, 'lxml')
>>> soup.find_all("a", string=re.compile(r'(?i)(first|last)'))
[<a>first</a>, <a>last first</a>, <a>something something last</a>]
>>> soup.find_all("a", string=matches_firstlast)
[<a>first</a>, <a>last first</a>, <a>something something last</a>]