有没有办法使用以下方法在Python中操作字符串?
对于以点表示法存储的任何字符串,例如:
s = "classes.students.grades"
有没有办法将字符串更改为以下内容:
"classes.students"
基本上,删除所有内容,包括最后一段时间。因此"restaurants.spanish.food.salty"
将成为"restaurants.spanish.food"
。
此外,还有什么办法可以确定上一期后会发生什么?我想这样做的原因是我想使用isDigit()
。
所以,如果是classes.students.grades.0
我可以以某种方式获取0
,那么我可以使用带有isdigit
的if语句,并说明最后一段时间后字符串的一部分(在这种情况下0
)是一个数字,删除它,否则,留下它。
答案 0 :(得分:20)
s = "classes.students.grades"
print '.'.join(s.split('.')[:-1])
您正在.
分割字符串 - 它会给您一个字符串列表,之后您将列表元素加回到字符串,将它们分隔为.
[:-1]
将从列表中选择所有元素,但最后一个
检查上一个.
之后的内容:
s.split('.')[-1]
另一种方法是使用rsplit
。它的工作方式与拆分相同,但如果您提供 maxsplit 参数,则会从结尾开始拆分字符串:
rest, last = s.rsplit('.', 1)
'classes.students'
'grades'
您还可以使用re.sub
替换上一个.
之后的空白字符串部分:
re.sub('\.[^.]+$', '', s)
问题的最后一部分要在[]
中包含单词,我建议使用format
和list comprehension
:
''.join("[{}]".format(e) for e in s.split('.'))
它会为您提供所需的输出:
[classes][students][grades]
答案 1 :(得分:15)
执行此操作的最佳方法是使用rsplit
方法并传入double heightInMeters = (heightInInches * 0.0254);
参数。
maxsplit
您还可以使用rfind()
方法进行常规切片操作。
在最后>>> s = "classes.students.grades"
>>> before, after = s.rsplit('.', maxsplit=1) # rsplit('.', 1) in Python 2.x onwards
>>> before
'classes.students'
>>> after
'grades'
之前获取所有内容:
.
然后是>>> s = "classes.students.grades"
>>> last_index = s.rfind('.')
>>> s[:last_index]
'classes.students'
.
答案 2 :(得分:13)
如果'.' in s
,s.rpartition('.')
找到s
中的最后一个点,则
并返回(before_last_dot, dot, after_last_dot)
:
s = "classes.students.grades"
s.rpartition('.')[0]
答案 3 :(得分:4)
如果您的目标是摆脱只有一位数的最终成分,请以re.sub()
开头和结尾:
s = re.sub(r"\.\d$", "", s)
这将完成工作,并留下其他字符串。不需要搞乱任何其他事情。
如果您确实想了解一般情况(将最后一个组件分开,无论它是什么),请使用rsplit
分割您的字符串一次:
>>> "hel.lo.there".rsplit(".", 1)
['hel.lo', 'there']
如果字符串中没有点,那么您只需在数组中获得一个元素,即整个字符串。
答案 4 :(得分:0)
您可以使用rsplit(str.rsplit([sep[, maxsplit]]
)非常简单地执行此操作,它将通过断开给定分隔符中的每个元素来返回列表。
您还可以指定应执行的拆分数:
>>> s = "res.spa.f.sal.786423"
>>> s.rsplit('.',1)
['res.spa.f.sal', '786423']
所以你描述的最终功能是:
def dimimak_cool_function(s):
if '.' not in s: return s
start, end = s.rsplit('.', 1)
return start if end.isdigit() else s
>>> dimimak_cool_function("res.spa.f.sal.786423")
'res.spa.f.sal'
>>> dimimak_cool_function("res.spa.f.sal")
'res.spa.f.sal'