如何使用 RegEx 执行 if 或 else?
Posted
技术标签:
【中文标题】如何使用 RegEx 执行 if 或 else?【英文标题】:How to do an if or else with RegEx? 【发布时间】:2021-09-30 08:27:38 【问题描述】:我仍在学习 Python,并且正在为我的 Discord 服务器开发一个机器人。我想做一个命令来检查我的列表(cat.json)中皮肤(项目)的可用性。
所以一位朋友推荐我使用 RegEx 来识别该项目,并且它可以正常工作。
我想对这个系统应用规则(if/else),但是当我使用 if/else 时,命令不再正常工作......
这是我的代码:
class Cat(commands.Cog): # cog
def __init__(self, client): # cog setup.
self.client = client
@commands.command( # command to check the skin in the list.
name="skin",
aliases=["s"]
)
async def skin(self, ctx, skin):
list_ = json.load(open("cogs/cat.json")) # ['battle queen katarina', 'katarina 02', 'graves 01']
r = re.compile(f".*skin") # regex filter.
newlist = list(filter(r.match, list_)) # newlist = filtred regex list.
if skin in newlist: # if skin (command) is in newlist:
await ctx.channel.send(newlist) # send the new list.
else:
await ctx.channel.send(f'your skin (skin) is not available.')
def setup(client):
client.add_cog(Cat(client)) # cog
命令:!s katarina
'your skin (katarina) is not available.'
预期:
命令:!s katarina
['battle queen katarina', 'katarina 02']
如果它返回这样就完美了:
'Katarina available skins: Battle Queen Katarina, Katarina 02'
【问题讨论】:
Regex 不是解决此问题的合适解决方案。 Python 有in
关键字,您可以使用它来检查关键字是否出现在给定名称中。
我会在那个正则表达式模式上做更多工作......你可以使用regex101.com进行实验
【参考方案1】:
对于您的情况,我将使用in
而不是regex
,这是第一种情况:
@commands.command( # command to check the skin_input in the list.
name="skin_input",
aliases=["s"]
)
async def skin(self, ctx, skin_input):
skin_list = ['battle queen katarina', 'katarina 02', 'graves 01']
newlist = list() # store target skin
for skin_item in skin_list:
if skin_input in skin_item: # if "katarina" in skin_item
newlist.append(skin_item) # add it into list
if len(newlist) == 0:
await ctx.channel.send(f'your skin_input (skin_input) is not available.')
else:
await ctx.channel.send(newlist) # send the new list.
第二个
@commands.command( # command to check the skin_input in the list.
name="skin_input",
aliases=["s"]
)
async def skin(self, ctx, skin_input):
skin_list = ['battle queen katarina', 'katarina 02', 'graves 01']
newlist = list() # store target skin
skin_found = ""
for skin_item in skin_list:
if skin_input in skin_item: # if "katarina" in skin_item
newlist.append(skin_item) # add it into list, no need in this case
skin_found += skin_item + ", " # the return item (str) you want
if len(newlist) == 0:
await ctx.channel.send(f'your skin_input (skin_input) is not available.')
else:
await ctx.channel.send(f'skin_input available skins: skin_found[:-2]') # send the new list. # the[:-2]is to filter ", "
您可以按照自己的方式编辑它,可能没有不必要的new_list
:)
【讨论】:
非常感谢,它真的很有效,我会尝试理解你的代码来学习如何自己做非常感谢你 @balas 这对你很好,欢迎加入 btw!记得把skin_list
改回文件I/O,我用硬代码测试过。以上是关于如何使用 RegEx 执行 if 或 else?的主要内容,如果未能解决你的问题,请参考以下文章