对于你们中的许多人来说,我确信这是一个非常简单的问题,但我只是刚开始学习正则表达式,而现在我不能将以下内容从以下内容中分离出来:< / 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]
虽然没有运气:(
答案 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
如果您将$
取出,则它会同时在所有行上匹配。