2

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

"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]

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

4

6 回答 6

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'
于 2012-07-10T17:56:50.567 回答
3

如果数字前总是有一个空格,则可以拆分字符串。例如:

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
于 2012-07-10T17:58:20.163 回答
3

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

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

正则表达式很难掌握,但值得努力。

于 2012-07-10T18:00:13.780 回答
3

您可以使用正则表达式sub()方法:

返回通过替换 repl 替换 string 中最左边的不重叠出现的模式获得的字符串。如果未找到该模式,则字符串原封不动地返回。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.],并将它们替换为 ''。此外,它会修剪最后一个字符,即空格。

于 2012-07-10T18:04:39.203 回答
2

怎么样...

filter(lambda ch: not ch.isdigit(), "Diablo Lord Of Destruction 9.2")
于 2012-07-10T17:57:32.070 回答
1

要获取所有文本,直到遇到第一个数字:

import re

s = "Diablo Lord Of Destruction 9.2"
print(re.match(r'\D*', s).group(0))
于 2012-07-10T18:13:37.810 回答