正则表达式新手:如何在字符串中隔离'num-num-num'

时间:2015-06-04 14:29:06

标签: regex

对于你们中的许多人来说,我确信这是一个非常简单的问题,但我只是刚开始学习正则表达式,而现在我不能将以下内容从以下内容中分离出来:< / p>

June 2015 - Won / Void / Lost = 3-0-1

我需要一个解决方案来隔离字符串末尾的'num-num-num'部分,该部分适用于任何正整数。

感谢您的帮助

修改

因此,我写的scrapy蜘蛛的这行代码产生了上面的一行:

tips_str = sel.xpath('//*[@class="recent-picks"]//div[@class="title3"]/text()').extract()[0]

我试图隔离我之后的部分:

    tips_str = sel.xpath('//*[@class="recent-picks"]//div[@class="title3"]/text()').re(r'\d+-\d+-\d+$').extract()[0]

虽然没有运气:(

2 个答案:

答案 0 :(得分:2)

捕获的正则表达式是:

\d+-\d+-\d+$

它的工作原理如下:

  • \d+-表示:捕获1个或多个数字(数字[0-9]),然后捕获“ - ”。
  • $表示:您现在应该在行尾。

将其转换为完整的正则表达式模式:

  

捕获1个或多个数字,然后是连字符,然后是1个或更多个数字,然后是连字符,然后是1个或更多个数字,我们现在应该在字符串的末尾。

编辑:处理您的修改和评论:

我不太确定你的意思是“孤立”。我假设你的意思是你希望tips_str等于“3-0-1”。

我认为最简单的方法是首先使用xpath为整行提取字符串而不进行任何正则表达式。然后,当我们只是处理一个字符串(而不是xpath的东西)时,它应该很好并且易于使用正则表达式并获得模式。

据我了解,sel.xpath('//*[@class="recent-picks"]//div[@class="title3"]/text()').extract()[0](没有.re())为您提供字符串:“2015年6月 - 赢了/无效/丢失= 3-0-1”。

那么:

full_str = sel.xpath('//*[@class="recent-picks"]//div[@class="title3"]/text()').extract()[0]

现在我们已经有了完整的字符串,我们可以使用标准的字符串正则表达式来填充我们想要的部分:

tips_str = false

search = re.search(r'\d+-\d+-\d+$', full_str)
if(search):
    tips_str = search.group(0)

现在tips_str将等于“3-0-1”。如果模式根本不匹配,则它等于false

如果我的任何假设是错误的,那么让我知道实际发生了什么(比如如果.extract()[0]没有给回一个字符串,那么它回馈了什么?)我将尝试调整这个响应

答案 1 :(得分:0)

任何和所有数字,所以否定,科学记数法等?这将匹配它。

/(\-?[\.\d]+(e\+|e\-)?[\.\d]*)-(\-?[\.\d]+(e\+|e\-)?[\.\d]*)-(\-?[\.\d]+(e\+|e\-)?[\.\d]*)$/ig

用这些测试:

June 2015 - Won / Void / Lost = -1.1e+3-1.01-0.1e+2
June 2015 - Won / Void / Lost = 1-2-3
June 2015 - Won / Void / Lost = 0.1--5-5.6

如果您将$取出,则它会同时在所有行上匹配。