gpt4 book ai didi

python - 如果多个子字符串以特定顺序匹配字符串

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:07 24 4
gpt4 key购买 nike

我想知道如何检测两个子字符串是否按特定顺序匹配主字符串。例如,如果我们在字符串中的任何地方查找 "hours" 然后是 "minutes",并且字符串是 "what is 5 hours in分钟”,它将返回 true。如果字符串是 “what is 5 minutes in hours”,它将返回 false

最佳答案

s = "what is 5 hours in minutes"
a, b = s.find("hours"),s.find("minutes")
print(-1 < a < b)

如果字符串中不存在 a,您也可以避免检查 b:

 def inds(s, s1, s2):
a = s.find(s1)
return -1 < a < s.find(s2)

如果你想从 +1 开始,改变是微不足道的:

def inds(s, s1, s2):
a = s.find(s1)
return -1 < a < s.find(s2, a+1)

但是如果你总是想确保 a 在 b 之前出现,那么坚持第一个解决方案。您也没有说是否可以匹配子字符串,即:

a = "foo"
b = "bar"

将匹配:

"foobar"

但它们不是字符串中的实际单词。如果你想匹配实际的单词,那么你要么需要拆分和清理文本,要么使用带有正则表达式的单词边界。

如果你想匹配精确的单词而不是部分匹配,那么使用带单词边界的正则表达式:

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

它不会匹配 foobar 中的“foo”和“bar”:

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

关于python - 如果多个子字符串以特定顺序匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com