<pre><code>s = "what is 5 hours in minutes"
a, b = s.find("hours"),s.find("minutes")
print(-1 < a < b)
</code></pre>
<p>如果字符串中不存在a,也可以避免检查b:</p>
<pre><code> def inds(s, s1, s2):
a = s.find(s1)
return -1 < a < s.find(s2)
</code></pre>
<p>如果您想从+1开始,则可以进行以下更改:</p>
<pre><code>def inds(s, s1, s2):
a = s.find(s1)
return -1 < a < s.find(s2, a+1)
</code></pre>
<p>但是如果你总是想确保a在b之前,那么就坚持第一个解决方案。您也没有说明子字符串是否可以匹配,即:</p>
<pre><code>a = "foo"
b = "bar"
</code></pre>
<p>将匹配:</p>
<pre><code>"foobar"
</code></pre>
<p>但它们不是字符串中的实际单词。如果您想匹配实际的单词,那么您要么需要分割和清理文本,要么使用正则表达式的单词边界。你知道吗</p>
<p>如果要匹配精确的单词而不是部分匹配,请使用正则表达式并使用单词边界:</p>
<pre><code>import re
def consec(s, *args):
if not args:
raise ValueError("args cannot be empty")
it = iter(args)
prev = re.search(r"\b{}\b".format(next(it)), s)
if not prev:
return False
prev = prev.end()
for w in args:
ind = re.search(r"\b{}\b".format(w), s, prev + 1)
if not ind:
return False
prev = ind.end()
return True
</code></pre>
<p>与foobar中的“foo”和“bar”不匹配:</p>
<pre><code>In [9]: consec("foobar","foo","bar")
Out[9]: False
In [10]: consec("foobar bar for bar","foo","bar")
Out[10]: False
In [11]: consec("foobar bar foo bar","foo","bar")
Out[11]: True
In [12]: consec("foobar","foo","bar")
Out[12]: False
In [13]: consec("foobar bar foo bar","foo","bar")
Out[13]: True
In [14]: consec("","foo","bar")
Out[14]: False
In [15]: consec("foobar bar foo bar","foobar","foo","bar")
Out[15]: True
</code></pre>