代码之家  ›  专栏  ›  技术社区  ›  Pratik Soni

从预定义模板中提取值

  •  0
  • Pratik Soni  · 技术社区  · 1 年前

    我创建了一个自动化的电源自动化流程,它在任何收到的电子邮件上执行并执行 unbound action custom action “ValidateEmailBody”用C#编写,并在CRM插件注册中注册。

    我正在使用自定义regex读取预定义模板中传递的值,到目前为止,它运行良好,但现在我想让它与用户几乎不兼容。

    这里的要求是- 修剪前面和后面的空间 它们是由邮件发送者错误地添加的,以便自定义操作可以正确地获取记录。

    以下是给定正则表达式的工作模板:

    Regex :

    var templatePattern = new Regex(@"Case title:[ ]{1,}(?<caseTitle>.*?)\n{1,}Client:[ ]{1,}(?<client>.*?)\n{1,}Origin:[ ]{1,}(?<origin>.*?)\n{1,}Contact:[ ]{1,}(?<contact>.*?)\n{1,}DSM:[ ]{1,}(?<dsm>.*?)\n{1,}CSM:[ ]{1,}(?<csm>.*?)\n{1,}Assigned To:[ ]{1,}(?<assignedTo>.*?)\n{1,}Due Date:[ ]{1,}(?<dueDate>.*?)\n{1,}Description:[ ]{1,}(?<desc>.*?)$");
    

    正则表达式的解释 :

    []{1,} -> Can have one or more spaces
    ?<groupName>.*? -> Creates a group name to extract the word(s)
    \n{1,} --> Allows one or more new line
    $ --> End of line
    

    样板 :

    案例标题:样本测试案例9 客户:8688211 来源:电子邮件 联系 [email protected] DSM:testContact1 CSM:testContact1 分配给: [email protected] 到期日期:2023年6月28日 说明:样品说明9

    现在,我想从值中修剪多余的空格,然后读取中的值 C 例如,请参考以下模板:

    新的可能模板 :

    案例标题:样本测试案例9 客户:8688211 来源:电子邮件 联系 [email protected] DSM:testContact1 CSM:testContact1 分配给: [email protected]
    到期日期:2023年6月28日 说明:样品说明9

    为了实现这一点,我需要对自定义操作或regex进行哪些更改?

    仅供参考,我之所以阅读这个值,是因为基于此,我需要在CRM中创建一个新记录,所以如果有额外的空格或新行,我将停止这样做。

    提前谢谢。

    1 回复  |  直到 1 年前
        1
  •  1
  •   The fourth bird    1 年前

    如果要匹配整行的值,可以使用 \S 匹配捕获组中的非空白字符,然后在后面加上可选空格,直到出现下面的换行符。

    请注意,您只匹配空格。如果要匹配没有换行符的空格,则可以使用 [\p{Zs}\t]+

    构造类似 [ ]{1,} 可以缩短为 + \n{1,} \n+

    ^Case title: +(?<caseTitle>.*\S) *\n+Client: +(?<client>.*?\S) *\n+Origin: +(?<origin>.*?\S) *\n+Contact: +(?<contact>.*?\S) *\n+DSM: +(?<dsm>.*?) *\n+CSM: +(?<csm>.*?\S) *\n+Assigned To: +(?<assignedTo>.*?\S) *\n+Due Date: +(?<dueDate>.*?\S) *\n+Description: +(?<desc>.*?\S) *$
    

    Regex demo

    因此,每一条单独的线都有相同的图案结构:

     +                  -> Can have one or more spaces
    (?<groupName>.*?\S  -> Creates a group name to extract the word(s) ending on a non whitspace character
     *\n+               -> One or more new lines preceded by optional spaces
     *$                 -> End of line, preceded by optional spaces