Zapier 中的 RegExp 不返回任何值

RegExp in Zapier not returning any values

我正在尝试从 Zapier 中的不和谐消息中提取一些值。 消息的内容应该看起来像这样(几乎像 YAML):

channel: <#1234567890123456789>
as: Bot nicname
image: http://example.com/
content:
Hello, world!

其中 imageas 字段是可选的。

我创建了 2 个正则表达式来完成这个任务:

Python:

import re
r = re.compile(r"(?:channel:)? ?<#(?P<channel>\d+)>\n+(?:as: ?(?P<as>.+)\n+)?(:?image: ?(?P<image>.+)\n+)?content:\n*(?P<content>[\s\S]+)")

JS:

let r = /(?:channel:)? ?<#(?<channel>\d+)>\n+(?:as: ?(?<as>.+)\n+)?(?:image: ?(?<image>.+)\n+)?content:\n*(?<content>[\s\S]+)/;

我尝试了什么:

regexr and pythex 中测试正则表达式。两者都适合我。

然后我将它们输入到 Zapier:

output 来自 python 代码:

    groups: null
    id: <ID>
    runtime_meta:
    memory_used_mb: 57
    duration_ms: 3
    logs:
    1. re.compile('(?:channel:)? ?<#(?P<channel>\d+)>\n+(?:as: ?(?P<nick>.+)\n+)?(:?image: ?(?P<image>.+)\n+)?content:\n*(?P<content>[\s\S]+)')
    2. 'channel: <#1234567890123456> \nas: bot nickname\ncontent:\nHello, world!'
    3. None

(后来在 运行 JavaScript 中有类似的结果)

什么有效(有点):

尝试调试时,我删除了正则表达式的 image 部分(在 Text->Extract 表达式中):

(?:channel:)? ?<#(?P<channel>\d+)>\n+(?:as: ?(?P<as>.+)\n+)?content:\n*(?P<content>[\s\S]+)

随着输入:

channel: <#1234567890123456>
as: INFO
content:
Hello, world!

结果如预期:

output:
0: 1234567890123456
1: INFO
2: Hello, world!
_end: 68
_matched: true
_start: 0
as: INFO
channel: 1234567890123456
content: Hello, world!

感谢任何让它工作的帮助:)

你可以匹配 0 个或多个 whitespaces 除了使用 [^\S\r\n]* 的换行符。使用 \s* 匹配 0+ 次任何白色 space 字符,包括换行符。

使用 ? 可选择匹配单个 space。

根据你要匹配的字符串,可以决定在同一行匹配space个,或者是否也接受跨行

您可以将模式更新为:

(?:channel:)?[^\S\r\n]*<#(?P<channel>\d+)>\s*\n(?:as:[^\S\r\n]*(?P<as>.+)\n+)?(:?image:[^\S\r\n]*(?P<image>.+)\n+)?content:\n*(?P<content>[\s\S]+)

Regex demo