计算电子邮件中特定字符串的实例

时间:2013-12-18 20:05:37

标签: visual-studio-2012 vbscript outlook outlook-addin outlook-vba

我已经找到了类似的问题而没有运气。我目前有工作代码,在电子邮件正文和主题中查找字符串的特定实例。找到此字符串后,它具有将其带入另一个方向的userform。我的目的是让它遍历整个电子邮件,并计算它发现此迭代的次数,并为该用户表单(弹出窗口)提供一个可调用的变量。这是我的代码。它返回错误,显示“InvalidCastException”,所以我猜这是一个转换错误。有任何想法吗?谢谢!


好的,所以我将你的评论加在一起,并提出以下建议。我得到了很多错误,因为我假设的正则表达式不存在。有任何想法吗?还要感谢您的文献。

    Dim regEx   ' Create variable.
    Dim numfound As Integer
    regEx = New RegExp   ' Create a regular expression.
    'Here it tells me that the regEx.Patter doesn't exist or Pattern is a member of the regex class
    regEx.Pattern = "\*#{9}\*" ' Set pattern.
    regEx.IgnoreCase = True   ' Set case insensitivity.
    regEx.Global = True   ' Set global applicability.
    If regEx.Execute(mailItem.Body) Then
        ' Getting a "not declared" runtime what should it be declared a Integer such as Dim numfound as Object
        numfound = regEx.count
    End If

进行了更多挖掘,基本上我回到了InvalidCastException开始的地方,

从字符串“111111111

转换

123121233

“输入'Long'无效。

基本上在我的测试电子邮件的正文中,我有两个数字字符串,它不能将它们转换为字符串,然后运行regexp迭代。有什么想法吗?

Dim sBody : sBody = (mailItem.Body) Or (mailItem.Subject) 'This is where is gives me the error
    Dim Search : Search = New RegExp
    Search.Global = True
    Search.Pattern = "\*#{9}\*"
    MsgBox(Search.Execute(sBody).Count, MsgBoxStyle.OkOnly)

2 个答案:

答案 0 :(得分:1)

为了帮助您入门,如果您想使用RegExp:

(1)开始阅读herehere

(2)演示代码为您提供深思熟虑:

>> Dim sBody : sBody = "Three instances of ###: ### and a part of ####."
>> Dim Search : Set Search = New RegExp
>> Search.Global = True
>> Search.Pattern = "#{3,3}"
>> WScript.Echo Search.Execute(sBody).Count
>>
3
>>

答案 1 :(得分:-2)

最简单的方法是创建一个RegEx实例并用它来解析Item.Body。

Set Search = new RegExp
Search.IgnoreCase = True
Search.Global = True

Search.Pattern = "\*#{9}\*"
If Search.Test(Item.Body) Then
   'will hold how many times it has been found
   numFound = Search.Count
End If

这是一个链接,其中包含有关RegExp http://msdn.microsoft.com/en-us/library/ms974570.aspx

的更多信息