Python 中可以采用任何字符形式的字符串的占位符变量

Placeholder variable for a string in Python that can take the form of any character

在 python 中是否有某种方法允许我这样做:

if string == "*" + "this" + "*" +"blue" + "*":

如果“string”是“this is blue”、“this was blue”或“XYZ this XYZ blue XYZ”,则结果为 True

在 python 中可以用简单的方式实现类似的功能吗? 我不是说 %s 格式,因为你需要传递一些值作为 %s,我需要它能够检查所有可能的形式。忽略“this”和“blue”之间的一切。但是我不能只检查字符串的前 4 个字符是否为“this”,最后 4 个字符是否为“blue”,因为该字符串实际上是一个长文本,我需要能够检查这个长文本中是否有是一个写着“this .... blue”的部分

不,但我认为您可以自己动手。像这样:

inps = [
    'this is blue',
    'this was blue',
    'XYZ this XYZ blue XYZ',
    'this is',
    'blue here',
]


def find_it(string: str, *werds):
    num_werds = len(werds)
    werd_idx = 0
    cur_werd = werds[werd_idx]

    for w in string.split(' '):
        if w == cur_werd:
            werd_idx += 1
            if werd_idx == num_werds:
                return True
            cur_werd = werds[werd_idx]

    return False


for s in inps:
    print(find_it(s, 'this', 'blue'))

输出:

True
True
True
False
False

使用 Python 中通过 re 模块提供的正则表达式:

>>> import re
>>> re.match(".*this.*blue.*", "this is blue")
<re.Match object; span=(0, 12), match='this is blue'>

在正则表达式中,.* 具有您正在寻找的通配符效果; . 表示“任何字符”,* 表示“任意数量的字符”。

如果您想在没有正则表达式的情况下执行此操作,可以使用 str.find 方法,该方法会为您提供一个字符串在较大字符串中首次出现的索引。先找到第一个词的索引:

>>> string = "did you know that this blue bird is a corvid?"
>>> string.find("this")
18

然后您可以将字符串分割成该词之后的所有内容:

>>> string[18+4:]
' blue bird is a corvid?'

并用第二个词重复find操作:

>>> string[18+4:].find("blue")
1

如果 find() 调用 returns -1,则没有匹配项。在函数的形式中,这可能看起来像:

>>> def find_words(string, *words):
...     for word in words:
...         i = string.find(word)
...         if i < 0:
...             return False
...         string = string[i+len(word):]
...     return True
...
>>> find_words(string, "blue", "bird")
True
>>> find_words(string, "bird", "blue")
False

试试这个,只用简单的 python 代码。

def check(string,patt):
    string = string.split(' ')
    patt = patt.split(' ')
    if len(string) != len(patt):
        return False    
    return all(True if v =="*" else v==string[i] for i,v in enumerate(patt))
       
        
    

patt = "* blue * sky *"
string="Hii blue is sky h"

if check(string,patt):
    print("Yes")
else:
    print("No")