【问题标题】:Python Regex Search for three termsPython Regex 搜索三个词
【发布时间】:2015-07-07 10:52:20
【问题描述】:

我是 Python 和 Regex 的新手,有点困惑。我想在网页标题中搜索三个不同的术语,如果标题与我想要打印出来的标题匹配(我使用的是scrapy,所以它会为每个项目打印它)。我不确定我们如何让它通过三个术语进行搜索?例如,如果标题有“Dresses|Wallets|Pumps”打印出来。

现在我只是打印标题中的第一个词

c_raw = response.xpath('//title').extract()
c_re = re.search('<title>(.*?) |.*?', c_raw[0])
c = c_re.group(1).lower()

我试过了

c_raw = response.xpath('//title').extract()
c_re = re.search('Dresses|Wallets|Pumps', c_raw[0])
c = c_re.group(0)

但有些 c 的打印没有。我也不确定c_raw[0] 在做什么? 0 有什么作用? 任何帮助将不胜感激!

编辑:虽然以下答案有所帮助 - 在 Dresses|Wallets|Pumps 周围添加括号也有效

【问题讨论】:

  • 在正则表达式周围添加括号有帮助吗?喜欢(Dresses|Wallets|Pumps)
  • @rednaw 这实际上修复了它!
  • 在解析网页时,您应该尝试使用像 BeautifulSoup 这样的 XML 解析器,而不是正则表达式。

标签: python regex


【解决方案1】:

这是一个正则表达式,它将找出您的哪些(如果有)标题关键字出现在c_raw

regex = re.compile("(?:Dresses)|(?:Wallets)|(?:Pumps)")
print regex.findall(c_raw)

(?:Dresses)等的格式,只是表示括号内的字母按照它们一起出现的顺序匹配,但不要将它们保存为正则表达式组。

至于c_raw[0]在做什么,基本上c_raw是一个字符串。在 python 中,您可以将字符串视为字符数组。所以,c_raw[0] 是说,给我数组 c_raw 的第 0 个索引——即获取 c_raw 的第一个字符

【讨论】:

    【解决方案2】:

    从 scrapy shell 尝试这个演示,

    In [1]: text = "<title>Testing test Pumps abc asdf a</title>"
    
    In [2]: sel = Selector(text=text)
    
    In [3]: sel.xpath('//title').re('Dresses|Wallets|Pumps')
    Out[3]: [u'Pumps']
    

    我已经为选择器对象输入了一个 html,因为您没有提供任何特定的 start-url

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 2020-09-15
      • 1970-01-01
      • 2023-03-15
      • 2016-02-26
      • 2016-01-28
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多