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")
在 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")