当前位置: 首页 > 知识库问答 >
问题:

如何匹配精确字符串和通配符字符串

吴刚毅
2023-03-14

比如说我有这个:

import discord, asyncio, time

client = discord.Client()

@client.event
async def on_message(message):
    if message.content.lower().startswith("!test"):
        await client.send_message(message.channel,'test')

client.run('clienttokenhere')

我想做两件事:

1) 使其成为当且仅当用户准确键入<代码>时!测试和其他内容,它将在通道中打印出测试

2)使其成为如果用户键入! test首先后跟空格和至少一个其他字符串字符,它将打印出test——例如:a)! test不会打印出任何东西,b)! test! test后跟一个空格)不会打印出任何东西,c)!test1不会打印出任何东西,d)!testa c不会打印出任何东西,但是e)!test 1将打印出test, f)! test 123abc将打印出test, g)! test a将打印出test, and h)! test?! abc123将打印出test等。

我只知道“startswith”和“endswith”,就我的研究而言,没有“精确”这样的东西,我也不知道如何使它在“startswith”之后需要最少的数字字符

共有2个答案

常温文
2023-03-14

看起来您需要一个正则表达式,而不是startswith()。您似乎有两个相互冲突的要求:

1) 使其成为当且仅当用户准确键入<代码>时!测试和其他内容,它将在通道中打印出测试

2a)<代码>!测试不会打印任何内容

包括1但不包括2a:

import re
test_re = re.compile(r"!test( \S+)?$")
# This says: look for
# !test (optionally followed by one space followed by one or more nonspace chars) followed by EOL
# 

@client.event
async def on_message(message):
    if test_re.match(message.content.lower()):
        await client.send_message(message.channel,'test')

包括2a,不包括1,替换此行(测试后的空格和填充物不再是可选的):

test_re = re.compile(r"!test \S+$")
屈宏爽
2023-03-14

使用==运算符。

1)当接收到的字符串中只有! test时打印测试

if message.content.lower() == '!test':
    await client.send_message(message.channel,'test')

2) 打印后接字符串的测试

# If it starts with !test and a space, and the length of a list
# separated by a space containing only non-empty strings is larger than 1,
# print the string without the first word (which is !test)

if message.content.lower().startswith("!test ") 
   and len([x for x in message.content.lower().split(' ') if x]) > 1:
    await client.send_message(message.channel, 'test ' + ' '.join(message.content.split(' ')[1:]))
 类似资料:
  • 我正在尝试创建一个Lucene4.10索引。我只想在索引中保存我放入文档的确切字符串,witout标记化。 我在用StandardAnalyzer。 我试图搜索术语“燃料箱容量”@en(包括引号),所以我试图省略它们,并在术语周围添加了另外几个引号,以便让lucene理解我正在搜索整个文本。 如果我打印查询,我会得到:3:“燃料箱容量en”,但我不想拆分@符号上的文本。 我认为我的第一个问题是St

  • 我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:

  • 问题 你想使用 Unix Shell 中常用的通配符(比如 *.py , Dat[0-9]*.csv 等)去匹配文本字符串 解决方案 fnmatch 模块提供了两个函数—— fnmatch() 和 fnmatchcase() ,可以用来实现这样的匹配。用法如下: >>> from fnmatch import fnmatch, fnmatchcase >>> fnmatch('foo.txt',

  • 问题内容: 我有一个oracle表,该表具有名为system_access的列,该列具有以下数据: 基于上述示例数据,我不确定我的查询仅检索与“只读”和/或“只读”的确切单词匹配的记录 我不需要具有“只读(否)”,后接空格或方括号的记录,或“只读(请参阅mgr)”,其后或接续无空格和括号的记录。 因此,根据以上示例数据,我只会返回两行,即: 如前所述,只有与字符串“ Read Only”或“ re

  • 问题 你想要匹配两个或多个字符串。 解决方案 计算把一个字符串转换成另一个字符串所需的编辑距离或操作数。 levenshtein = (str1, str2) -> l1 = str1.length l2 = str2.length prevDist = [0..l2] nextDist = [0..l2] for i in [1..l1] by 1

  • 问题内容: 我正在寻找一个正则表达式来匹配Java源代码中的字符串文字。 可能吗? 我的意图是用其他东西替换另一个字符串中的所有字符串。使用: 这样的事情。 问题答案: 好。那么,您想要在字符串中搜索以双引号开头和结尾的一系列字符吗? 注意非贪婪模式。