【问题标题】:RegEx to extract text and number in outlook vba正则表达式在 Outlook vba 中提取文本和数字
【发布时间】:2018-05-05 08:54:48
【问题描述】:

我收到的邮件如下:

Dear XYZ,

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

CASE ID: 123654

Best Regards,
XYZ

文本可以是一个或两个段落。我想做两个正则表达式。一个应该给我段落中的文本,另一个应该给我 CASE ID 的编号。结果应如下所示:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.


123654

我已经设法创建了一个正则表达式来使用(CASE ID\s*[:]+\s*(\w*)\s*)获取案例,但我无法提取该段落。任何帮助将不胜感激。

【问题讨论】:

  • 试试这个(\n|^).*?(?=\n|$)
  • 或者这只是第一段(^).*?(?=\n|$)
  • 您首先需要找出分隔线的原因,是只有 \n 还是类似 \t\r\n 或类似的东西
  • @AndriiPryimak : 这两种表达方式都给了我“亲爱的 XYZ”
  • @Harry : 很抱歉这个新手问题,但我该怎么做呢?

标签: regex vba outlook


【解决方案1】:

基本上你可以或应该做一个正则表达式来代替,这将提供匹配组。

在几乎任何其他语言中,它看起来都像这样(使用“gs”标志来忽略换行符):

(.+?)CASE ID: (\d+)

但是对于 vbscript 它我们有这样的东西:

(.*?[^\$]*)CASE ID: (\d+)

您还需要像这样处理匹配组:

Dim RegEx : Set RegEx = New RegExp
RegEx.Pattern = "(.*?[^\$]*)CASE ID: (\d+)"
RegEx.Global  = True
RegEx.MultiLine = True
Dim strTemp : strTemp = "Lorem ipsum " & VbCrLf & "Cannot be translated to english " & VbCrLf & "CASE ID: 153" 
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(0)
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(1)

问题是,这仅在消息中包含常量字符串“CASE ID:”时才有效。如果字符串丢失,例如“:”之后的换行符不起作用

【讨论】:

  • 我非常感谢您为此付出的努力,无论结果如何,我都欠您一个冷淡的:)
  • 嗯,我知道我离 vbscript 太远了,我猜可以用大多数其他语言帮助你。您需要了解如何使第一部分 (.+?) 也匹配任何换行符,因此您的所有输入文本都被解析为单行。如果数组不存在,vbscript 对数组索引访问也很挑剔。你明白我的想法了吗,你能处理它吗?您可以在regex101.com 上对其进行测试,但请检查“正则表达式选项”单行和全局...
  • @'search_email = item.body.body's'With RegExp 987654327 Global = True 987654329 Set Matches = RegExp.Execute(Search_Email) 987654331 Debug.Print Matches(1) ali = Matches(1) ali = Matches(1)Debug.Print "Not Found "End IfNextSet RegExp = Nothing
  • 当我尝试打印结果时它没有,这意味着它没有找到任何匹配项。是的 vba 很烂,我只需要它来完成这个任务,我不明白这里的问题。
  • 现在整理出来了,请试试这个模式并添加multiline=true参数。尽管有结果,但还是期待寒冷的 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多