在字符串中的几个特定字符后打印所有内容

时间:2016-06-20 21:20:51

标签: python python-3.x

我的意图是使用索引方法在字符串中搜索冒号(:)或等号(=)并打印该字符后面的所有内容但我意识到它在语法上是不可能的,因为它在下面用OR语句编写。那么还有另一种方法来编写这段代码吗? (我无法想出一个简单的方法来编写它而不进入循环和if语句)

l='Name = stack'
pos=l.index(':' or '=')  
print (' '.join(l[pos+1:-1].split())) #this just gets rid of the whitespaces

3 个答案:

答案 0 :(得分:2)

import re

l='Name = stack'
print(re.split(':|=', l)[-1])

正则表达式在任一字符上拆分,然后取最后一个结果。

你没有提到是否保证是一个或另一个分隔符,而不是两者,总是一个分隔符,不超过一个分隔符...这可能不会做你想要的,取决于。

答案 1 :(得分:2)

假设你的例子如上所述,很长的路(下面各部分的解释):

pos = max(l.find(':'), l.find('='), 0)      
print(l[pos:].strip())    

这是一种将其缩短为一行的方法,并按照评估顺序对每个部分进行说明。

print(l[max(l.find(':'),l.find('='),0):].strip())
#--------------- Breakdown
# max -> highest of values; find returns -1 if it isn't there.
#        using a 0 at the end means if ':'/'=' aren't in the string, print the whole thing.
# l.find(),l.find() -> check the two characters, using the higher due to max()
# l[max():] -> use that higher value until the end (implied with empty :])
# .strip() -> remove whitespace              

答案 2 :(得分:1)

您应该使用maxsplit中的re.split()将分割数限制为一个:

import re

s1 = 'name1 = x1 and noise:noise=noise'
s2 = 'name2: x2 and noise:noise=noise'
print(re.split(':|=', s1, maxsplit=1)[-1].strip())
print(re.split(':|=', s2, maxsplit=1)[-1].strip())

输出:

x1 and noise:noise=noise
x2 and noise:noise=noise