特定ch上的regex结束搜索

2024-10-01 15:49:05 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个字符串,我正试图通过搜索使用检索. 该字符串由一个Id和其后的一个字符串组合而成。所以看起来是这样:<@randomId> string after

我在re.search方法中使用regex模式"^@(|[WU].+?)>(.*)",尝试得到两个不同的组。第一组是id,减去< >。所以就是"@randomId"。第二组是Id后面的"string after"文本。因此,如果传递给re.search的文本是"<@QWE1234> do this",我希望匹配并返回"@QWE1234""do this"。你知道吗

对于我使用的regex,我得到的返回类型是None,当我将<添加到regex模式时,它看起来是这样的:"^<@(|[WU].+?)>(.*)"我得到整个字符串。你知道吗


Tags: 字符串文本reidsearchstring模式this
3条回答

要匹配2个捕获组,您可以从regex中删除这部分|[WU],并添加\s+来说明以下空白字符,这样您就不必修剪该匹配。你知道吗

你的正则表达式看起来像^{}

或者不使用.+?,您可以使用[^>]+

^{}

那会匹配的

  • 匹配<
  • (@[^>]+)在组1和@中捕获,然后不使用否定字符类>
  • 匹配>
  • \s+匹配一个或多个空格字符
  • (.*)在组2中捕获零个或多个字符(如果后面必须至少有一个字符,则可以使用.+

Demo

如果只允许大写字符和数字,可以使用:

^{}

^匹配字符串的开头,因此您希望您的模式是"^<@(|[WU].+?)>(.*)""@(|[WU].+?)>(.*)"。请注意,模式比需要的要复杂一些,"^<@(.+?)>(.*)"应该可以工作。您可能还希望在组中拉取@,因为这样它将匹配您描述的输出。你知道吗

所以你的代码应该是这样的:

match = re.search(r"^<(@.+?)>(.*)")
if match is None: 
   pass # handle the case that it is not found
else:
   randomId = match.groups(1)
   textAfter = match.groups(2)

所以regex"^<@(|[WU].+?)>(.*)"是正确的,但是我没有从检索方法。我必须指定return (matches.group(1), matches.group(2).strip())

相关问题 更多 >

    热门问题