我正在使用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或任何只是尝试一步一步!
我的正则表达式是不正确的还是我回复它们的方式?谢谢!
答案 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>