正则表达式:跳过组中角色的第一场比赛?

时间:2016-10-25 07:01:15

标签: python regex

来自此字符串

s = 'stringalading-0.26.0-1'

我想提取部分0.26.0-1。我可以想出各种方法来实现这一点,使用分割或使用像这样的模式的正则表达式

pattern = r'\d+\.\d+\.\d+\-\d+'

我还尝试使用一组字符,如下所示:

pattern = r'[.\-\d]+'

这给了我:

In [30]: re.findall(pattern, s)
Out[30]: ['-0.26.0-1']

所以我想知道:是否可以跳过组中第一次出现的字符,在这种情况下是第一次出现-

2 个答案:

答案 0 :(得分:2)

  

是否可以跳过组中第一次出现的字符,在这种情况下第一次出现 - ?

NO ,因为匹配时,正则表达式引擎从左到右处理字符串,一旦找到匹配的模式,匹配的文本块就会写入匹配缓冲区。因此,要么写一个只匹配你需要的正则表达式,要么通过从左边剥离不需要的字符来后处理找到的结果。

我认为你这里不需要正则表达式。您可以使用- split字符串并将 maxsplit 参数设置为1,然后只需访问第二项:

s = 'stringalading-0.26.0-1'
print(s.split("-", 1)[1])   # => '0.26.0-1'

请参阅Python demo

此外,您的第一个正则表达式works well

import re
s = 'stringalading-0.26.0-1'
pat = r'\d+\.\d+\.\d+-\d+'
print(re.findall(pat, s)) # => ['0.26.0-1']

答案 1 :(得分:1)

执行:

-(.*)

并获取第1组。

示例:

In [9]: s = 'stringalading-0.26.0-1'

In [10]: re.search(r'-(.*)', s).group(1)
Out[10]: '0.26.0-1'