如何删除Python中特定字符之前的所有内容

如何删除Python中特定字符之前的所有内容,python,regex,string,Python,Regex,String,我是python新手,正在努力完成某项任务: 我有一个字符串,它可以有任何东西,但它总是“结束”相同。 它可以只是一个文件名、完整路径,也可以只是一个以版本号结尾的随机字符串 例如: C:\Users\abc\Desktop\string-anotherstring-15.1R7-S8.1 string-anotherstring-15.1R7-S8.1 string-anotherstring.andanother-15.1R7-S8.1 总是一样的(从结尾看)是,如果你到达第二个点,在它前

我是python新手,正在努力完成某项任务:

我有一个字符串,它可以有任何东西,但它总是“结束”相同。 它可以只是一个文件名、完整路径,也可以只是一个以版本号结尾的随机字符串

例如:

C:\Users\abc\Desktop\string-anotherstring-15.1R7-S8.1
string-anotherstring-15.1R7-S8.1
string-anotherstring.andanother-15.1R7-S8.1
总是一样的(从结尾看)是,如果你到达第二个点,在它前面走两个字符,你总是匹配我感兴趣的部分。 在某个字符串之后剪切所有内容“很容易”,我自己解决了这个问题——这就是为什么字符串以现在的版本结尾:)

有没有办法告诉python,“从字符串后面找第二个点,在它前面找2,删除前面的所有内容,这样我就可以得到作为字符串的版本?”

很高兴有人给了我正确的方向


谢谢

假设我理解正确,我会想到两种方法:

包括两者,因为我可能无法正确理解这一点,并且出于完整性原因。我认为拆分/部分解决方案更干净,尤其是当“特定字符”是点时

>>> msg = r'C:\Users\abc\Desktop\string-anotherstring-15.1R7-S8.1'

>>> re.search(r'.*(..\..*)', msg).group(1)
'S8.1'

>>> parts = msg.split('.')
>>> ".".join((parts[-2][-2:], parts[-1]))
'S8.1'

如果需要版本号,可以使用连字符(-)拆分字符串吗?还是只需要依赖点

请参阅下面的使用和,它可以帮助您

>>> a = 'string-anotherstring.andanother-15.1R7-S8.1'
>>> a.rsplit('-')
['string', 'anotherstring.andanother', '15.1R7', 'S8.1']
>>> a.rsplit('-')[-2:] #Get everything from second last to the end
['15.1R7', 'S8.1']
>>> '-'.join(a.rsplit('-')[-2:]) #Get everything from second last to the end, and join them with a hyphen
'15.1R7-S8.1'
>>> 
对于使用点,使用相同的方法

>>> a
'string-anotherstring.andanother-15.1R7-S8.1'
>>> data = a.rsplit('.')
>>> [data[-3][-2:]]
['15']
>>> [data[-3][-2:]] + data[-2:]
['15', '1R7-S8', '1']
>>> '.'.join([data[-3][-2:]] + data[-2:])
'15.1R7-S8.1'
>>> 

可以使用锚点
$
从行的结束标记构建正则表达式

使用您自己的描述,使用正则表达式:

(\d\d\.[^.]*)\.[^.]*$

如果希望包含结尾的最后一个字符,只需移动捕获括号:

(\d\d\.[^.]*\.[^.]*)$

说明:

(\d\d\.[^.]*\.[^.]*)$

 ^  ^                    #digits
      ^                  # a literal '.'
        ^                # anything OTHER THAN a '.'
            ^            # literal '.'
               ^         # anything OTHER THAN a '.'
                     ^   # end of line

例如,您可以用分隔符“-”拆分字符串,然后将最后两个索引连接起来。如下所示:

txt=“string-anotherstring-15.1R7-S8.1”
x=txt.split(“-”)
y=”“.加入(x[-2:])
打印(y)#输出15.1R7S8.1

So-out'C:\Users\abc\Desktop\string-anotherstring-15.1R7-S8.1'你在找S8.1吗?使用str.rsplit()并查看输出,然后切片所需的值(-2)我在找15.1R7-S8.1如何告诉rsplit从后面“计数”,而只使用第二个“?否则它会产生非常奇怪的输出…如果我“分割”“有了圆点,圆点就消失了——不过,它是软件版本的一部分。不要从字符的角度来考虑,而是用分隔符分割后得到的组。谢谢。我修改了它以获得完整的版本字符串:“.”。通过这种方式加入((部分[-3][-2]、部分[-2]、部分[-1]),我总是得到完整的版本:)我看到人们使用很酷的正则表达式,我想也许我应该学习它们。我把它们添加到我应该知道的不断增长的事物中。然后,将来当我需要使用正则表达式时,我会在谷歌上搜索,然后回到我不懂正则表达式的状态。总有一天,那一天可能永远不会到来,我将学习正则表达式!继续看例子,总有一天它会非常自然。这个网站是一个很好的资源:@lllrnr101 regex是一把非常锋利的双刃剑。我会认为自己精通正则表达式,但如果可能的话,我试图让我的代码不被人阅读。