test - using regex excel
Reglas de expresión regulares en Outlook 2007? (2)
No sé si una expresión regular se puede usar directamente en una regla, pero puede hacer que una regla active una secuencia de comandos y la secuencia de comandos puede usar expresiones regulares. Odio las perspectivas
Primero, debe abrir el editor de scripts a través de Herramientas - Macro - Abrir el Editor de Visual Basic (Alt-F11 es el atajo).
El editor se abrirá. Debe contener un esquema de proyecto en un pequeño panel en la esquina superior izquierda. El proyecto aparecerá como VBAProject.OTM. Expanda este elemento para revelar los Objetos de Microsoft Office Outlook. Expanda eso para revelar ThisOutlookSession. Haga doble clic en ThisOutlookSession para abrir el panel de edición de código (que probablemente estará en blanco).
A continuación, selecciona el menú Herramientas | Referencias y habilitar las referencias de RegExp llamadas algo así como "Microsoft VBScript Regular Expressions 5.5"
Ahora puede crear una subrutina para realizar su acción de filtrado. Tenga en cuenta que una subrutina llamada por una regla debe tener un único parámetro de tipo Outlook.MailItem. Por ejemplo:
'' note that Stack Overflow''s syntax highlighting doesn''t understand VBScript''s
'' comment character (the single quote) - it treats it as a string delimiter. To
'' make the code appear correctly, each comment must be closed with another single
'' quote so that the syntax highlighter will stop coloring everything as a string.''
Public Enum Actions
ACT_DELIVER = 0
ACT_DELETE = 1
ACT_QUARANTINE = 2
End Enum
Sub MyNiftyFilter(Item As Outlook.MailItem)
Dim Matches, Match
Dim RegEx As New RegExp
RegEx.IgnoreCase = True
'' assume mail is good''
Dim Message As String: Message = ""
Dim Action As Actions: Action = ACT_DELIVER
'' SPAM TEST: Illegal word in subject''
RegEx.Pattern = "(v/|agra|erection|penis|boner|pharmacy|painkiller|vicodin|valium|adderol|sex med|pills|pilules|viagra|cialis|levitra|rolex|diploma)"
If Action = ACT_DELIVER Then
If RegEx.Test(Item.Subject) Then
Action = ACT_QUARANTINE
Set Matches = RegEx.Execute(Item.Subject)
Message = "SPAM: Subject contains restricted word(s): " & JoinMatches(Matches, ",")
End If
End If
'' other tests''
Select Case Action
Case Actions.ACT_QUARANTINE
Dim ns As Outlook.NameSpace
Set ns = Application.GetNamespace("MAPI")
Dim junk As Outlook.Folder
Set junk = ns.GetDefaultFolder(olFolderJunk)
Item.Subject = "SPAM: " & Item.Subject
If Item.BodyFormat = olFormatHTML Then
Item.HTMLBody = "<h2>" & Message & "</h2>" & Item.HTMLBody
Else
Item.Body = Message & vbCrLf & vbCrLf & Item.Body
End If
Item.Save
Item.Move junk
Case Actions.ACT_DELETE
'' similar to above, but grab Deleted Items folder as destination of move''
Case Actions.ACT_DELIVER
'' do nothing''
End Select
End Sub
Private Function JoinMatches(Matches, Delimeter)
Dim RVal: RVal = ""
For Each Match In Matches
If Len(RVal) <> 0 Then
RVal = RVal & ", " & Match.Value
Else
RVal = RVal & Match.Value
End If
Next
JoinMatches = RVal
End Function
A continuación, debe crear una regla (Herramientas - Reglas y Alertas) para activar esta secuencia de comandos. Haga clic en el botón Nueva regla en el cuadro de diálogo para iniciar el asistente. Seleccione una plantilla para la regla. Elija la plantilla "Comprobar mensajes cuando lleguen" de la categoría "Comenzar a partir de una regla en blanco". Haga clic en Siguiente.
Elija la condición "Solo en esta máquina" (¿no es así?) Y haga clic en siguiente.
Elija la opción "ejecutar un script". En la parte inferior del asistente, donde muestra su nueva regla, debe leer:
Apply this rule after the message arrives
on this machine only
run a script
La frase "una secuencia de comandos" es un enlace en el que se puede hacer clic. Haga clic en él y Outlook mostrará un cuadro de diálogo que debe mostrar la subrutina que creó anteriormente. Seleccione su subrutina y haga clic en el botón Aceptar.
Puede hacer clic en Siguiente para agregar excepciones a la regla o hacer clic en Finalizar si no tiene excepciones.
Ahora, como si el proceso no fuera lo suficientemente contorneado, esta regla se desactivará cada vez que detenga y reinicie Outlook a menos que firme el script con una clave de firma de código.
Si aún no tiene una clave de firma de código, puede crear una con OpenSSL .
¿Mencioné que odio Outlook?
¿Es posible crear reglas en Outlook 2007 basadas en una cadena de expresiones regulares?
Estoy intentando agregar un filtro para los mensajes que contienen una cadena como: 4000-10
, un número de cuatro dígitos seguido de un guión y luego un número de dos dígitos, que puede ser cualquier cosa desde 0000-00
hasta 9999-99
.
Estaba usando esto como una expresión regular: /b[0-9]{4}/-[0-9]{2}/b
pero el filtro no funciona. También intenté algunas otras modificaciones sin suerte. No pude encontrar nada concreto en línea acerca de si Outlook incluso admite ingresar expresiones regulares en una regla, así que pensé que lo haría aquí en caso de que estuviera perdiendo el tiempo.
EDITAR: Gracias al comentario de Chris a continuación, pude implementar este filtro a través de una macro. Pensé que podría compartir mi código a continuación en caso de que sea capaz de ayudar a alguien más:
Sub JobNumberFilter(Message As Outlook.MailItem)
Dim MatchesSubject, MatchesBody
Dim RegEx As New RegExp
''e.g. 1000-10''
RegEx.Pattern = "([0-9]{4}-[0-9]{2})"
''Check for pattern in subject and body''
If (RegEx.Test(Message.Subject) Or RegEx.Test(Message.Body)) Then
Set MatchesSubject = RegEx.Execute(Message.Subject)
Set MatchesBody = RegEx.Execute(Message.Body)
If Not (MatchesSubject Is Nothing And MatchesBody Is Nothing) Then
''Assign "Job Number" category''
Message.Categories = "Job Number"
Message.Save
End If
End If
End Sub
Microsoft Outlook no admite expresiones regulares . Puede realizar búsquedas de comodines, aunque por alguna razón inexplicable, el carácter comodín es %
, no *
.