- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个我编写的谷歌应用程序脚本,并且它的工作方式非常接近我想要的方式。
目前它会抓取收件箱中排名前 100 位的电子邮件,对它们进行一些过滤,使用正则表达式抓取一些字段,然后创建一封电子邮件以将抓取和格式化的内容发送出去。
我要删除的这类电子邮件大部分都是标准化的。电子邮件的正文具有预定义的字段,例如:
主题:日期:回复日期:要求:契约(Contract)号:
因此,正则表达式会搜索硬编码值,如“Subject:”,然后捕获冒号后的所有内容,直到遇到换行符。它通过以下声明这样做:
内容匹配(/主题:(。*)/)
它将匹配冒号之后的任何内容,直到遇到换行符。这几乎适用于我需要抓取的所有字段。然而,有一点麻烦。其中之一,我需要抓取的最后一个(上面未显示)将跨越多行。无法预测需要多长时间,但我有另一段预定义的文本可用于确定停止捕获的位置。
因此,例如,一个字段可以跨越任意多行,然后消息正文中将出现类似于 ****end of input**** 的消息。我想捕获从我的匹配子句开始的任何内容,例如...“主题:”并在它遇到预定义短语“****输入结束****”时停止
我该如何编写匹配子句正则表达式来做到这一点?
我做了很多研究,但没有什么成果。正则表达式不是我很擅长的东西。
在此先感谢您的帮助。
最佳答案
您可以使用任何字符的惰性匹配,包括带有 [\s\S]*?
的换行符,使用前瞻性限制检查我们是否到达了 **** 的结尾输入****
子字符串:
/Subject :\s*([\s\S]*?)(?=\*{4}end of input\*{4})/
参见 regex demo
但是,对于较长的文本,我宁愿使用相同正则表达式的展开版本:
/Subject :\s*([^*]*(?:\*(?!\*{3}end of input\*{4})[^*]*)*)/
参见 another demo
关于regex - 谷歌应用脚本正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272446/
我是一名优秀的程序员,十分优秀!