如何在第一次出现数字之前的最后一个字母处截断字符串?

时间:2012-07-10 17:53:50

标签: python string parsing indexing

我正在尝试在字符串中查找内容 - 所有内容都在数字之前,例如:

"Diablo Lord Of Destruction 9.2"

这是来自file[2] = "Diablo Lord Of Destruction 9.2"

的文件的索引

如何编写仅选择文本的代码,并在这些数字之前省略数字和空白区域(如下所示)?

"Diablo Lord Of Destruction"

我知道你可以通过做这样的事情轻松地做到这一点:

contents = file[2]
print contents[0:-2]

由于值会发生变化,我需要一个更强大的解决方案,可以处理不同大小的数字和不同长度的空白区域。

6 个答案:

答案 0 :(得分:7)

这将删除字符串中的任何数字和句号:

import re
>>> filtered = re.sub('[0-9.]*','',"Diablo Lord Of Destruction 9.2  111" )
>>> filtered
'Diablo Lord Of Destruction   '
>>> filtered.strip()           # you might want to get rid of the trailing space too!
'Diablo Lord Of Destruction'

答案 1 :(得分:3)

如果您在号码前总是有空格,可以split字符串。例如:

contents = file[2].split() # Gives a list split by whitespace
contents.pop() # Dump the number
finalStr = ' '.join(contents)

从测试开始:

>>> test = "Diablo Lord Of Destruction 9.2"
>>> contents = test.split()
>>> contents
['Diablo', 'Lord', 'Of', 'Destruction', '9.2']
>>> contents.pop()
'9.2'
>>> finalStr = ' '.join(contents)
>>> finalStr
'Diablo Lord Of Destruction

答案 2 :(得分:3)

这是正则表达式的完美工作。具体来说,您可以使用以下代码提取数字前面的所有文本:

import re
s = "Diablo Lord Of Destruction 9.2"
print 'Text: ', re.match('([^0-9]+)',s).group(1)

正则表达式有点难以掌握,但值得付出努力。

答案 3 :(得分:3)

您可以使用regular expressionssub()方法:

  

返回通过替换最左边的非重叠获得的字符串   替换repl在字符串中出现模式。如果   找不到模式,字符串返回不变。 repl可以是一个   字符串或函数;如果它是一个字符串,任何反斜杠都会在其中转义   正在处理。

>>> import re
>>> re.sub('[0-9.]*', '', 'Diablo Lord of Destruction 9.2')[:-1]
'Diablo Lord of Destruction'
>>> re.sub('[\d.]*', '', 'Diablo Lord of Destruction 9.2')[:-1]
'Diablo Lord of Destruction'

上面的代码将找到所有出现次数,[0-9。]或[\ d。],并用''替换它们。此外,它修剪了最后一个字符,这是一个空格。

答案 4 :(得分:2)

怎么样......

filter(lambda ch: not ch.isdigit(), "Diablo Lord Of Destruction 9.2")

答案 5 :(得分:1)

要获取所有文本,直到遇到第一个号码:

import re

s = "Diablo Lord Of Destruction 9.2"
print(re.match(r'\D*', s).group(0))