关于正则表达式提取的一个非常基本的问题

2024-10-02 18:15:38 发布

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

我需要提取在具有以下结构的URL中指定的ID:

https://trello.com/c/iGjJLqwr/1-test-project

在上面的示例中,我想提取:

iGjJLqwr

我需要在Zapier中使用regex表达式,根据文档,它使用Python regex

以下python正则表达式的方向是正确的,但返回的结果仍然太多:

[^https://trello.com/c/][\w]+

返回3个匹配项:

Match 1
Full match  21-29   iGjJLqwr
Match 2
Full match  31-36   -test
Match 3
Full match  36-44   -project

我需要将结果限制为:

iGjJLqwr

下面的正则表达式返回一个额外的正斜杠

[^https://trello.com/c/]\w+/

Match 1
Full match  21-30   iGjJLqwr/

Tags: httpstestprojectcomidurl示例match
3条回答

方括号[ ... ]创建一个字符集,选择其中一个字符。如果在开头加上一克拉,[^ ... ],这一组就取反。模式不考虑括号内的完整连续字符串。你知道吗

换句话说,[aaabbc]等价于[abc](甚至[cba])。你知道吗

如果只想捕获组中https://trello.com/c/之后的第一个path元素,可以使用以下模式:

https://trello\.com/c/([^/]+).*

演示:https://regex101.com/r/99FDJS/2

如果希望模式仅与URL中的此子字符串相匹配,可以使用正向的lookahead和lookahead:

(?<=https://trello\.com/c/).+?(?=/.*)

演示:https://regex101.com/r/99FDJS/1

在您的模式中使用character class,它只匹配几个字符中的一个。从^开始将使其成为negated字符类,它匹配任何不在字符类中的字符。你知道吗

因为character类后面没有量词,所以这个[^https://trello.com/c/]将匹配单个i-,然后\w+将匹配一个单词字符的1+倍。你知道吗

这将为您提供匹配项iGjJLqwr-test-project

我想你的意思是要匹配一个组中的id:

^https://trello\.com/c/(\w+)

regex101 demo

关于图案

  • ^断言字符串的开头
  • https://trello\.com/c/逐字匹配https://trello.com/c/
  • (\w+)在组1中捕获匹配1+倍的单词字符

这将匹配没有额外正斜杠的ID:

import re

string = 'https://trello.com/c/iGjJLqwr/1-test-project'

match = re.search(r'[^https://trello.com/c/]\w*(?=/)', string)

print(match.group(0))
iGjJLqwr

(?=/)断言下一个字符是正斜杠。你知道吗

相关问题 更多 >