Zapier 问题中的 Python 正则表达式

Posted

技术标签:

【中文标题】Zapier 问题中的 Python 正则表达式【英文标题】:Python Regex in Zapier issue 【发布时间】:2020-11-18 02:25:51 【问题描述】:

我正在尝试从 salesforce 中获取一个具有换行符的字段,并在 zapier 中使用 python 步骤提取单词和标点符号。这是我的代码,但它返回和空字符串。如果有更好/更简单的方法,请告诉我,我对任何代码都非常陌生,并且通过谷歌搜索将其结合在一起。

import re

string = input_data['ac']

regex = r"^[a-z,A-Z].*[?.!]$"

cleaned = re.findall(regex, string)

return ['cleaned': cleaned]

这里有 2 张图片,原始评论和当前结果,我可以使用,但想通过更新代码来保留标点符号。

Original Comment

Current Result

JSON parser error

【问题讨论】:

您的正则表达式有^$ 锚,所以它要么匹配整个输入,要么什么都不匹配。所以做一个findall 是没有意义的,因为这些锚不可能多次出现,除非你使用re.MULITLINE 标志(也许你应该删除这些锚)。实际输入是什么样的? 通常输入是一些带有返回的短句。 “这项工作是针对每节 30 吨的桥梁,部分将单独运输” 我的意思是向我们展示所有的实际文本以及cleaned 的预期输出。 在评论中很难说,但每个句子或短语都换行了 只需使用整个输入和预期输出字符串的预期列表编辑您的问题。 【参考方案1】:

以下只是通过查找一个字母然后扫描直到找到一个句子终止字符来查找句子。

import re

s = input_data['ac'] 

# remove multiple, consecutive carriage returns and/or newlines
s = re.sub(r'[\r\n]+', '', s)

regex = r"""(?x)   # verbose flag
[A-Za-z]    # a letter
[^?.!]*     # one or more non-sentence-ending characters or .*? (non-greedy)
[?.!]       # a sentence-ending character
"""

cleaned = re.findall(regex, s)
result = ['cleaned': cleaned] 
#return result # only legal in a function

Regex Demo

【讨论】:

这行得通,除了 \n 在下一步中破坏了 json。如果可能的话,如果它只是一个带有标点符号的长字符串,那将是理想的。 我不明白您的 JSON 问题。我更新了答案以使用单个字典创建列表,然后将其转换为 JSON 字符串并打印结果。换行符对 JSON 没有问题。但是如果你不喜欢换行符。然后接受您的输入并用一个空格替换换行符:s = s.replace('\n', ' ')s = re.sub(r'\n+', ' ', s) 用一个空格替换多个换行符。 不想分句吗? 添加 s = s.replace('\n', ' ') 更接近,但它在末尾添加了一个逗号,因此它有一个句点,然后在末尾添加逗号。创建了我添加到原始帖子中的 JSON 解析器错误。 1.你从来没有,如被问及,展示了完整的实际输入是什么。 2. 就解析 JSON 输入而言,per se 字符串文字中的换行符和逗号没有任何违法之处。但很明显,这里执行了额外的规则来生成您的 JSON_PARSER_ERROR。如果不知道这些规则究竟是什么以及这些字符在字符串中的什么位置,您就无法期待奇迹。返回并阅读您发布的问题。你相信你完全表达了你的问题吗? 3. 准确地说:` s = s.replace('\n', ' ')` 没有添加任何东西到任何东西的末尾(更多...)

以上是关于Zapier 问题中的 Python 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Python 正则表达式不适用于 Gmail 正文

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

Zapier Formatter - 字符串中的 Hashtags 单词与豁免

使用 Regex For Zapier 提取根域

电子邮件正则表达式返回空 [重复]

Zapier JavaScript 和数组