繁体   English   中英

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

[英]How do I truncate a string at the last letter before the first occurrence of a digit?

我试图在字符串中找到东西 - 所有这些都在数字之前,例如:

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

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

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

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'

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

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

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

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

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

您可以使用正则表达式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。],并用''替换它们。 另外,它修剪了最后一个字符,这是一个空格。

怎么样...

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

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

import re

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM