我需要从输入中获得以下输出。
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
相同的输出
答案 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']
>>>