Regex 使用正则表达式提取URL
我从同一个网站收到10或12封电子邮件,我想使用regex提取一个特定的URL(如果可能的话),并将其粘贴到正确的Excel文件中。电子邮件在Outlook中,我已经有一个VBA脚本(从Outlook VBA运行),用于提取主题和发件人。然而,我确实需要每个电子邮件中的特定URL作为提取的第三条信息 我已尝试创建一系列步骤来:Regex 使用正则表达式提取URL,regex,vba,excel,outlook,Regex,Vba,Excel,Outlook,我从同一个网站收到10或12封电子邮件,我想使用regex提取一个特定的URL(如果可能的话),并将其粘贴到正确的Excel文件中。电子邮件在Outlook中,我已经有一个VBA脚本(从Outlook VBA运行),用于提取主题和发件人。然而,我确实需要每个电子邮件中的特定URL作为提取的第三条信息 我已尝试创建一系列步骤来: 创建正则表达式 将正则表达式应用于当前电子邮件 将提取的URL放入excel文档中 然而,我所创造的一切都失败得很惨。粘贴在下面的VBA始终有效,直到我在附加的正则表达式
/http:\/\/www.changedetection.com\/log(.*)/ig
每当我运行新的VBA脚本时,它都不会做任何事情。旧代码总是有效的。代码写入此Outlook会话(只是为了澄清),因为mailitem需要从脚本运行
Const xlUp As Long = -4162
Sub ExportToExcel(MyMail As MailItem)
Dim strID As String, olNS As Outlook.NameSpace
Dim olMail As Outlook.MailItem
Dim strFileName As String
Dim strBody As String
Dim Reg1 As RegExp
Dim M1 As MatchCollection
Dim M As Match
Set Reg1 = New RegExp
With Reg1
.Pattern = "http://www\.changedetection\.com/log(.*)"
.IgnoreCase = True
.Global = True
End With
If Reg1.test(olMail.Body) Then
Set M1 = Reg1.Execute(olMail.Body)
For Each M In M1
strBody = M.SubMatches(1)
Next
End If
'~~> Excel Variables
Dim oXLApp As Object, oXLwb As Object, oXLws As Object
Dim lRow As Long
strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set olMail = olNS.GetItemFromID(strID)
'~~> Establish an EXCEL application object
On Error Resume Next
Set oXLApp = GetObject(, "Excel.Application")
'~~> If not found then create new instance
If Err.Number <> 0 Then
Set oXLApp = CreateObject("Excel.Application")
End If
Err.Clear
On Error GoTo 0
'~~> Show Excel
oXLApp.Visible = True
'~~> Open the relevant file
Set oXLwb = oXLApp.Workbooks.Open("M:\Monitor\Monitor_Test_1.xlsx")
'~~> Set the relevant output sheet. Change as applicable
Set oXLws = oXLwb.Sheets("Test")
lRow = oXLws.Range("A" & oXLApp.Rows.Count).End(xlUp).Row + 1
'~~> Write to outlook
With oXLws
'
'~~> Code here to output data from email to Excel File
'~~> For example
'
.Range("A" & lRow).Value = olMail.Subject
.Range("B" & lRow).Value = olMail.SenderName
.Range("C" & lRow).Value = strBody
'
End With
'~~> Close and Clean up Excel
oXLwb.Close (True)
oXLApp.Quit
Set Reg1 = Nothing
Set oXLws = Nothing
Set oXLwb = Nothing
Set oXLApp = Nothing
Set olMail = Nothing
Set olNS = Nothing
End Sub
Const xlUp As Long=-4162
子ExportToExcel(我的邮件作为邮件项)
Dim strID作为字符串,olNS作为Outlook.NameSpace
以Outlook.MailItem的形式发送邮件
将strFileName设置为字符串
像弦一样暗的链子
Dim Reg1作为RegExp
将M1设置为匹配集合
把我当作对手
Set Reg1=New RegExp
使用Reg1
.Pattern=”http://www\.changedetection\.com/log(.*)”
.IgnoreCase=True
.Global=True
以
如果是Reg1.test(olMail.Body),那么
Set M1=Reg1.Execute(olMail.Body)
M1中每M
strBody=M.子匹配(1)
下一个
如果结束
'~~>Excel变量
Dim oXLApp作为对象,oXLwb作为对象,oXLws作为对象
暗淡的光线和长的一样
strID=MyMail.EntryID
Set olNS=Application.GetNamespace(“MAPI”)
设置olMail=olNS.GetItemFromID(strID)
“~~>建立EXCEL应用程序对象
出错时继续下一步
设置oXLApp=GetObject(,“Excel.Application”)
“~~>如果找不到,则创建新实例
如果错误号为0,则
设置oXLApp=CreateObject(“Excel.Application”)
如果结束
呃,明白了
错误转到0
“~~>显示Excel
oXLApp.Visible=True
“~~>打开相关文件
设置oXLwb=oXLApp.Workbooks.Open(“M:\Monitor\Monitor\u Test\u 1.xlsx”)
“~~>设置相关的输出表。更改(如适用)
设置oXLws=oXLwb.表(“测试”)
lRow=oXLws.Range(“A”&oXLApp.Rows.Count)。End(xlUp)。Row+1
“~~>写入outlook
使用oXLws
'
“~~>此处的代码用于将数据从电子邮件输出到Excel文件
例如‘~~>
'
.Range(“A”&lRow).Value=olMail.Subject
.Range(“B”&lRow).Value=olMail.SenderName
.Range(“C”和lRow).Value=strBody
'
以
“~~>关闭并清理Excel
oXLwb.Close(真)
奥克斯拉普,退出
Set Reg1=无
设置oXLws=Nothing
设置oXLwb=Nothing
设置oXLApp=Nothing
设置olMail=Nothing
设置olNS=Nothing
端接头
VBScript正则表达式模式不使用/
指示开始和结束。它们也不在后面的/
后面使用i
或g
来表示不区分大小写或全局性。相反,请使用IgnoreCase
和Global
属性
例如:
With Reg1
.Pattern = "http://www\.changedetection\.com/log(.*)"
.IgnoreCase = True
.Global = True
End With
如果您正在查找有关
RegExp
对象的更多信息。谢谢您的帮助。我在脚本中插入了更正。它仍然不起作用。我运行脚本,什么都没有。我一定是把别的事情搞砸了。我会看你寄给我的推荐信。如果您有任何其他建议,我想听听。它不是扩展到您的If Reg1.test(olMail.Body)那么语句吗?是的。我相信你是对的。它根本不是分支。请尝试上面的正则表达式。你不需要逃避前斜杠,但你需要逃避圆点。