搜索没有正则表达式的python子串

时间:2014-03-15 05:12:28

标签: python

我想在2个分隔符'+'和'!'之间的字符串中搜索子字符串。在子字符串的开头加上'+'。到目前为止我有:

if s.find("+")> -1 and s.find("!") > -1 and (s.find("+")>s.find("!")):
    .... do this ....

有更多的pythonic方式来写这个吗?

4 个答案:

答案 0 :(得分:4)

如果字符串不重叠,您可以像这样切割字符串

s = "Welcome to !+SO!"
try:
    print s[s.index("+"):s.rindex("!")+1]
    # +SO!
except ValueError:
    print "Either + or ! not found in the string"

答案 1 :(得分:1)

我认为这可能接近你正在寻找的东西......索引函数的神奇之处:

>>> s = 'This is an amazing + string with some delimiters ! in the middle of it'
>>> 
>>> s.index('with', s.index('+'), s.index('!'))
28
>>> s.index('**', s.index('+'), s.index('!'))                                        
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found

可以通过使用in关键字来确定简单的布尔响应:

>>> '**' in s[s.index('+')+1:s.index('!')]
False

答案 2 :(得分:1)

或者您可以拆分字符串:

In [7]: s.split('+')[-1].split('!')[0] if '+' in s and '!' in s else ''
Out[7]: 'lkwej'

In [8]: s = 'aaaaaa+bbbb!ccccccc+dddddd!eee'

In [9]: s.split('+')[-1].split('!')[0] if '+' in s and '!' in s else ''
Out[9]: 'dddddd'

当然,很容易变得非常复杂,取决于你想要得到的东西有多复杂:)。如果这是为了好玩,你可以继续尝试列表推导等......

答案 3 :(得分:1)

我认为你可以使用:

s = 'something + string you want ! somethin else'
if all(x in s for x in ['+', '!']) \
and abs(s.index('+') < s.index('!')) > 1:
    result = s[s.index('+')+1:s.index('!')]

仅当字符串具有分隔符并且它们之间存在某些内容时才会产生此结果。

结果将是:

' string you want '