点符号字符串操作

时间:2016-01-31 19:20:50

标签: python string

有没有办法使用以下方法在Python中操作字符串?

对于以点表示法存储的任何字符串,例如:

s = "classes.students.grades"

有没有办法将字符串更改为以下内容:

"classes.students"

基本上,删除所有内容,包括最后一段时间。因此"restaurants.spanish.food.salty"将成为"restaurants.spanish.food"

此外,还有什么办法可以确定上一期后会发生什么?我想这样做的原因是我想使用isDigit()

所以,如果是classes.students.grades.0我可以以某种方式获取0,那么我可以使用带有isdigit的if语句,并说明最后一段时间后字符串的一部分(在这种情况下0)是一个数字,删除它,否则,留下它。

5 个答案:

答案 0 :(得分:20)

您可以一起使用splitjoin

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)

问题的最后一部分要在[]中包含单词,我建议使用formatlist 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 ss.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'