regex 从预定义模板中提取值

pcww981p  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(89)

我创建了一个自动化的电源自动化流程-在任何传入的电子邮件上执行并执行unbound action-一个用C#编写的custom action“ValidateEmailBody”并在CRM插件注册中注册。
我使用自定义正则表达式来读取预定义模板中传递的值,到目前为止,它工作得很好,但现在我想让它与用户兼容。
这里的要求是-修剪邮件发件人错误添加的前后空格,以便自定义操作可以正确获取记录。
下面是给定正则表达式的工作模板:

正则表达式

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>.*?)$");

regex解释

[]{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来源:电子邮件联系人:testing@me.com DSM:testContact1 CSM:testContact 1分配给:testing@me.com到期日:06/28/2023描述:样品描述9
现在,我想从值中删除多余的空格,并只读取**C#**中的值。请参考以下模板:

新增可能模板

案例标题:样本测试案例9客户:8688211来源:电子邮件联系人:testing@me.com DSM:testContact1 CSM:testContact 1分配给:testing@me.com
到期日:2023年6月28日描述:样品描述9
为了实现这一点,我需要对我的自定义操作或正则表达式做哪些更改?
FYR,我正在阅读这个值,因为基于此,我需要在CRM中创建一个新的记录-所以如果有额外的空格或新行将阻止我这样做。
先谢谢你了。

am46iovg

am46iovg1#

如果您想匹配整行的值,可以使用\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

相关问题