[英]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/).+?(?=/.*)
这将匹配没有额外正斜杠的 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+)
关于图案
^
断言字符串的开始https://trello\\.com/c/
逐字匹配https://trello.com/c/
(\\w+)
在第 1 组中捕获匹配 1+ 次的单词字符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.