Zapier:代码没有返回预期的所有值

时间:2017-07-11 20:42:32

标签: python regex zapier

我正在使用Zapier的Code并且无法判断我的正则表达式是错还是其他部分是错误的(我认为是后者)

我正在拉一个URL,这个URL有几个9位ID,这些ID会附加到URL的末尾。我被告知尝试提取这些ID并重建URL,以便我们可以为每个URL发布API调用。

我是一个Python新手,但到目前为止我有这个,但它只返回前9位ID,我希望有一个数组,所以我可以用每个特定的ID重建URLS。到目前为止,这是我的代码:

import re
    urls = re.findall(r'\b\d+\b', input_data['input'])
         return [
             {'url': url} for url in urls
]

输入_data为"https://api.helpscout.net/v1/conversations/123456789,098765432.json"

正如我所说,它只返回第一个ID。我知道我没有代码重建URL或任何只是尝试一步一步!

我的正则表达式是不正确的还是我回复它们的方式?谢谢!

3 个答案:

答案 0 :(得分:1)

David来自Zapier平台团队。我有好消息和坏消息。

好消息是,你的正则表达式有效!所以没有汗水。在下方,你会遇到一个带有代码步骤的怪异角落。它没有记录,因为我们不鼓励它的使用(它让你感到困惑,正如你所知道的那样)。从代码步骤返回数组时,它的作用类似于触发器。也就是说,后续步骤针对阵列中的每个项目运行(但UI仅显示第一个)。

如果这是所需的行为,您可以安全地忽略奇怪的测试并完成zap。如果您不想散开,则应该解析逗号分隔的字符串并稍后对其进行操作。

如果您需要更多指导,请告诉我您的其他行为,我可以从那里提出建议。

旁注,您之前看到Willem函数的错误消息的原因是您的python代码必须将output变量设置为值或返回对象。 return get_digits(input_data['input'])output = get_digits(input_data['input'])中的任何一个都应该有用。

答案 1 :(得分:0)

代码在我的机器上正常工作:

import re

def get_digits(s):
    return [{'url':url} for url in re.findall(r'\b\d+\b',s)]

如果我用样本输入调用它,我得到:

>>> get_digits("https://api.helpscout.net/v1/conversations/123456789,098765432.json")
[{'url': '123456789'}, {'url': '098765432'}]

这是一个包含两个词典的列表。每个字典都包含一个密钥,'url'与包含一个或多个数字的字符串相关联。

如果您只想匹配九位数序列,可以使正则表达式更具限制性(但这只能减少匹配数量):

import re

def get_digits(s):
    return [{'url':url} for url in re.findall(r'\b\d{9}\b',s)]

答案 2 :(得分:0)

非常令人沮丧,我决定尝试JavaScript并且多种方法不输出任何内容

<script>
var str = "https://api.helpscout.net/v1/conversations/382411278,374879346,374879343.json";
var tickets = str.match(/\d{9}/g);
for(var i = 0; i<tickets.length; i++)
    {
document.write("https://api.helpscout.net/v1/conversations/"+tickets[i]+".json</br>")
}

<p id="demo"></p>
<script>
function myFunction() {
    var str = "https://api.helpscout.net/v1/conversations/382411278,374879346,374879343.json";
    var tickets = str.match(/\d{9}/g);

    for(var i = 0; i<tickets.length; i++)
    {
      document.getElementById("demo").innerHTML +="https://api.helpscout.net/v1/conversations/" +tickets[i] + "<br />"
    }

}
</script>