繁体   English   中英

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

[英]Very basic question about regex extraction

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

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

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

iGjJLqwr

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

以下 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/

方括号[ ... ]创建一个字符集的任何它们所包含的字符中选择一个 如果在开头添加克拉, [^ ... ] ,则此集合被否定。 该模式不考虑括号内的完整连续字符串。

换句话说, [aaabbc]等同于[abc] (甚至[cba] )。

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

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

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

如果您希望模式只匹配 URL 中的这个子字符串,您可以使用正向前瞻和后视:

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

演示: https : //regex101.com/r/99FDJS/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

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

在您的模式中,您使用的字符类仅匹配多个字符中的一个。 ^将使它成为一个否定字符类,它匹配不在字符类中的任何字符。

由于字符类后面没有量词,所以这个[^https://trello.com/c/]将匹配单个i-然后\\w+将匹配一个单词字符的 1+ 次。

这会给你的比赛iGjJLqwr-test-project

我认为您打算匹配捕获组中的 id:

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

regex101 演示

关于图案

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM