所以我有一个日期在中间的字符串,例如111_Joe_Smith_2010_Assessment
,我想截断它们,使其变成类似于111_Joe_Smith_2010
的字符串。我认为可行的代码是
reverseString = currentString[::-1]
stripper = re.search('\d', reverseString)
但是由于某些原因,这并不总是能给我正确的结果。多数情况下会这样做,但有时会输出类似111_Joe_Smith_2010_A
的字符串。
如果有人知道这是怎么回事,那将非常有帮助!
答案 0 :(得分:5)
您可以使用re.sub
和$
来匹配和替换字母字符
并加下划线直到字符串的结尾:
import re
d = ['111_Joe_Smith_2010_Assessment', '111_Bob_Smith_2010_Test_assessment']
new_s = [re.sub('[a-zA-Z_]+$', '', i) for i in d]
输出:
['111_Joe_Smith_2010', '111_Bob_Smith_2010']
答案 1 :(得分:2)
您可以使用re.sub
从字符串末尾去除非数字字符,如下所示:
>>> import re
>>> re.sub(r'\D+$', '', '111_Joe_Smith_2010_Assessment')
'111_Joe_Smith_2010'
对于您的输入格式,您还可以通过一个简单的循环来完成此操作:
>>> s = '111_Joe_Smith_2010_Assessment'
>>> i = len(s) - 1
>>> while not s[i].isdigit():
... i -= 1
...
>>> s[:i+1]
'111_Joe_Smith_2010'
答案 2 :(得分:1)
您可以使用以下方法:
def clean_names():
names = ['111_Joe_Smith_2010_Assessment', '111_Bob_Smith_2010_Test_assessment']
for name in names:
while not name[-1].isdigit():
name = name[:-1]
print(name)
答案 3 :(得分:1)
这是使用rstrip()
删除尾随字母和下划线的另一种解决方案,我认为它是re.sub()
的一种非常聪明的替代方法,如其他答案中所使用的:
import string
s = '111_Joe_Smith_2010_Assessment'
new_s = s.rstrip(f'{string.ascii_letters}_') # For Python 3.6+
new_s = s.rstrip(string.ascii_letters+'_') # For other Python versions
print(new_s) # 111_Joe_Smith_2010