我正在尝试在字符串中查找内容 - 所有内容都在数字之前,例如:
"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]
由于值会发生变化,我需要一个更强大的解决方案,可以处理不同大小的数字和不同长度的空白区域。
答案 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 expressions和sub()方法:
返回通过替换最左边的非重叠获得的字符串 替换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))