带有OR条件的Python正则表达式

带有OR条件的Python正则表达式,python,regex,Python,Regex,我已经用BeautifulSoup创建了我的代码,让我的url页面循环正常工作,并将我的项目移动到panda数据框中 问题是,若我的漂亮的汤对象并没有拾取一个值,那个么我的数组就会乱七八糟 我正在使用正则表达式在BeautifulSoup中查找我的项目 下面是让我感到困惑的子句,我在其中搜索宽度为10%和4个字符的项目 for item in soup.find_all("td", {"width": "10%"}, string=re.compile(r'^\d{4}$')): 但是,我想在

我已经用BeautifulSoup创建了我的代码,让我的url页面循环正常工作,并将我的项目移动到panda数据框中

问题是,若我的漂亮的汤对象并没有拾取一个值,那个么我的数组就会乱七八糟

我正在使用正则表达式在BeautifulSoup中查找我的项目

下面是让我感到困惑的子句,我在其中搜索宽度为10%和4个字符的项目

for item in soup.find_all("td", {"width": "10%"}, string=re.compile(r'^\d{4}$')):
但是,我想在正则表达式中添加另一个条件,以拾取具有4个字符包含字符'>'

我尝试了以下方法,但它只产生语法错误

for item in soup.find_all("td", {"width": "10%"}, string=re.compile(r'^\d{4}$') or string=re.compile(r'^(£)')):

如有任何建议,将不胜感激

您只需在现有正则表达式中添加对
的搜索:

for item in soup.find_all("td", {"width": "10%"}, string=re.compile(r'^(\d{4}|.*£.*)$')):
我假设字符串中可能有除
以外的其他字符,如果不是这样(它只是
),则删除替换的
*
部分,即

for item in soup.find_all("td", {"width": "10%"}, string=re.compile(r'^(\d{4}|£)$')):

您只需将搜索
添加到现有正则表达式中即可:

for item in soup.find_all("td", {"width": "10%"}, string=re.compile(r'^(\d{4}|.*£.*)$')):
我假设字符串中可能有除
以外的其他字符,如果不是这样(它只是
),则删除替换的
*
部分,即

for item in soup.find_all("td", {"width": "10%"}, string=re.compile(r'^(\d{4}|£)$')):

首先,为什么会出现语法错误:

soup.find_all("td", {"width": "10%"}, string=re.compile(r'^\d{4}$') or string=re.compile(r'^(£)'))
你做得很好

func(arg1, arg2, arg3=something or arg3=somethingelse)
您的
不包含在您要传递的两个参数中,您要在指定两个命名参数之间插入它,逗号通常位于两个命名参数之间。这是错误的,因为

  • Python不支持此语法,因为
  • 某物
    某物
    同时作为同一个参数传递给函数调用通常没有意义,因为
  • (据我所知)您实际上想做的是让
    find_all
    函数体本身合并所需的
    逻辑,这与参数求值步骤无关
  • 如果有疑问,请阅读文档。下面是beautifulsoup对
    find\u all

    使用字符串,您可以搜索字符串而不是标记。。。可以传入字符串、正则表达式、列表、函数或True值

    因此,我们可以将正则表达式传递给
    字符串
    ,当然您已经在这样做了。那么回到正轨上来,我们可以制作一个正则表达式来检查您描述的条件吗?对使用分组和
    |
    (或运算符)

    (^\d{4}$)|(^.*.*.$)
    这个正则表达式将匹配任何它是

    • 从开始到结束的4位字符
    • 任何包含
      字符的内容

    下面是一个正在运行的示例

    首先,为什么会出现语法错误:

    soup.find_all("td", {"width": "10%"}, string=re.compile(r'^\d{4}$') or string=re.compile(r'^(£)'))
    
    你做得很好

    func(arg1, arg2, arg3=something or arg3=somethingelse)
    
    您的
    不包含在您要传递的两个参数中,您要在指定两个命名参数之间插入它,逗号通常位于两个命名参数之间。这是错误的,因为

  • Python不支持此语法,因为
  • 某物
    某物
    同时作为同一个参数传递给函数调用通常没有意义,因为
  • (据我所知)您实际上想做的是让
    find_all
    函数体本身合并所需的
    逻辑,这与参数求值步骤无关
  • 如果有疑问,请阅读文档。下面是beautifulsoup对
    find\u all

    使用字符串,您可以搜索字符串而不是标记。。。可以传入字符串、正则表达式、列表、函数或True值

    因此,我们可以将正则表达式传递给
    字符串
    ,当然您已经在这样做了。那么回到正轨上来,我们可以制作一个正则表达式来检查您描述的条件吗?对使用分组和
    |
    (或运算符)

    (^\d{4}$)|(^.*.*.$)
    这个正则表达式将匹配任何它是

    • 从开始到结束的4位字符
    • 任何包含
      字符的内容
    这里有一个实际的例子