来自此字符串
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']
所以我想知道:是否可以跳过组中第一次出现的字符,在这种情况下是第一次出现-
?
答案 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'