Python常规单词剪切

时间:2011-11-02 11:17:52

标签: python

我有字符串:'./money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]'

我需要字符串:'27-10-2011 17:07:02'

我怎么能在python中做到这一点?

6 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,一种方法是使用str.partition

text='./money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]'
before,_,after = text.partition('[')
print(after[:-1])
# 27-10-2011 17:07:02

另一种方法是使用str.split

before,after = text.split('[',1)
print(after[:-1])
# 27-10-2011 17:07:02

str.findstr.rfind

ind1 = text.find('[')+1
ind2 = text.rfind(']')
print(text[ind1:ind2])

所有这些方法都依赖于紧跟在第一个左括号[之后的所需子字符串。

前两种方法还依赖于text中倒数第二个字符结尾的所需子字符串。最后一个方法(使用rfind)从右边搜索右括号的索引,所以它更通用一点,并且不依赖于那么多(潜在的逐个)常量。

答案 1 :(得分:1)

如果您的字符串始终具有相同的结构,这可能是最简单的解决方案:

s = r'./money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]'
s[s.find("[")+1:s.find("]")]

更新

在看到其他一些答案之后,这是一个小小的改进:

s[s.find("[")+1:-1]

利用结束方括号是字符串中的最后一个字符的事实。

答案 2 :(得分:1)

如果格式为“固定”,您也可以使用此

>>> s = './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]'
>>> s[-20:-1:]
'27-10-2011 17:07:02'
>>> 

答案 3 :(得分:0)

您还可以使用正则表达式:

import re

s = './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]'
print re.search(r'\[(.*?)\]', s).group(1)

答案 4 :(得分:0)

尝试使用正则表达式:

import re
re.findall(".*\[(.*)\]", './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]')

>>> ['27-10-2011 17:07:02']

答案 5 :(得分:0)

可能是最简单的方法(如果你知道字符串将始终采用这种格式

>>> s = './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]'
>>> s[s.index('[') + 1:-1]
'27-10-2011 17:07:02'