点符号字符串操作

Van*_*xel 17 python string

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

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

s = "classes.students.grades"
Run Code Online (Sandbox Code Playgroud)

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

"classes.students"
Run Code Online (Sandbox Code Playgroud)

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

另外,有没有办法确定上一期后的情况?我想这样做的原因是我想使用isDigit().

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

mid*_*ori 20

你可以使用splitjoin在一起:

s = "classes.students.grades"
print '.'.join(s.split('.')[:-1])
Run Code Online (Sandbox Code Playgroud)

你正在拆分字符串.- 它会给你一个字符串列表,之后你将列表元素加回到字符串中将它们分开.

[:-1] 将从列表中选择所有元素,但最后一个元素

检查最后一次后的内容.:

s.split('.')[-1]
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用rsplit.它的工作方式与split相同,但如果你提供maxsplit参数,它将从结尾开始分割字符串:

rest, last = s.rsplit('.', 1)

'classes.students'
'grades'
Run Code Online (Sandbox Code Playgroud)

您还可以使用空字符串re.sub替换最后.一个部分:

re.sub('\.[^.]+$', '', s)
Run Code Online (Sandbox Code Playgroud)

你的问题的最后一部分用[]i 包装我会建议使用formatlist comprehension:

''.join("[{}]".format(e) for e in s.split('.'))
Run Code Online (Sandbox Code Playgroud)

它会给你想要的输出:

[classes][students][grades]
Run Code Online (Sandbox Code Playgroud)

  • 为什么这么多工作,当你可以用`str.rsplit()`或`str.rpartition()`拆分*last*点? (2认同)

sty*_*ane 15

执行此操作的最佳方法是使用该rsplit方法并传入maxsplit参数.

>>> s = "classes.students.grades"
>>> before, after = s.rsplit('.', maxsplit=1) # rsplit('.', 1) in Python 2.x onwards
>>> before
'classes.students'
>>> after
'grades'
Run Code Online (Sandbox Code Playgroud)

您也可以使用rfind()普通切片操作的方法.

要在最后之前得到一切.:

>>> s = "classes.students.grades"
>>> last_index = s.rfind('.')
>>> s[:last_index]
'classes.students'
Run Code Online (Sandbox Code Playgroud)

然后一切都在追问 .

>>> s[last_index + 1:]
'grades'
Run Code Online (Sandbox Code Playgroud)


Gin*_*lus 13

如果'.' in s,s.rpartition('.')找到最后一个点s,
并返回(before_last_dot, dot, after_last_dot):

s = "classes.students.grades"
s.rpartition('.')[0]
Run Code Online (Sandbox Code Playgroud)