Python - 在第二个或第三个最后一个点后读取所有内容

时间:2016-10-26 19:04:55

标签: python python-2.7

我需要从输入中获得以下输出。

Input1: firstname.middlename.lastname.city.state
Expected output: city.state

Input2: firstname.middlename.lastname.city.state.
Expected output: city.state

当输入没有时,这是我有的表达式。最后:

'firstname.middlename.lastname.city.state'['firstname.middlename.lastname.city.state'[:'firstname.middlename.lastname.city.state'.rfind(".")].rfind(".")+1:]

如何修改此表达式,以便Input2具有与Input1相同的输出

4 个答案:

答案 0 :(得分:4)

input_ = 'firstname.middlename.lastname.city.state.'
x = [a for a in input_.split('.') if a]

print('.'.join(x[-2:])) # prints city.state

适用于两种输入。

答案 1 :(得分:3)

根据正则表达式拆分字符串

import re
input_string = "firstname.middlename.lastname.city.state."
".".join(re.findall(r'[^.]+', input_string)[-2:])

答案 2 :(得分:2)

使用.endswith()检查字符串是否以点结尾,然后删除最后一个点,例如。

str =  "firstname.middlename.lastname.city.state."
if str.endswith('.'):
   str = str[:-1] 

这将删除最后一个。并按照您当前的方法。

答案 3 :(得分:0)

创建一个字典,返回正确的切片对象,具体取决于字符串是否以点结尾。

>>> 
>>> s = 'firstname.middlename.lastname.city.state.'
>>> d = 'firstname.middlename.lastname.city.state'
>>> c_s = {True:slice(-3, -1), False:slice(-2, None, None)}
>>> s.split('.')[c_s[s.endswith('.')]]
['city', 'state']
>>> d.split('.')[c_s[d.endswith('.')]]
['city', 'state']
>>>

或写一个函数:

>>> def city_state(s):
    return s.split('.')[-3:-1] if s.endswith('.') else s.split('.')[-2:]

>>> city_state(s)
['city', 'state']
>>> city_state(d)
['city', 'state']
>>>