我需要我的模式匹配任何不超过3位数的数值。在句点之后可以是小数,不超过2位数。数值可以是正数或负数。应该接受的最后两个值应该是TRS或PCB。我想忽略这两个值的情况。因此,如果用户键入Sub ChangeSubject()
Dim obj As Object
Dim msg As Outlook.MailItem
Dim subject As String
Set obj = ActiveExplorer.Selection
subject = "Picture"
If Not obj Is Nothing Then
For i = 1 To obj.Count
Set msg = obj.Item(i)
With msg
.subject = subject
End With
Next i
ElseIf Not msg Is Nothing Then
msg.subject = subject
End If
End Sub
或TRS
,则两者都将被接受。以下是我到目前为止的情况:
trs
由于某种原因,我的数字值不被接受。如果有人可以提供帮助,请告诉我。谢谢。
答案 0 :(得分:2)
试试这个正则表达式:
^(?!\s*$)(?:TRS|PCB|[-]?999|[-]?(?:(?:[1-8]\d{2}|9\d[1-8]|[1-9]\d|\d)?(?:\.(?:0[1-9]|[1-9]\d))?))$
<强>解释强>
^
- 字符串的开头(?!\s*$)
- 避免匹配包含ONLY 0+空格的字符串的否定前瞻(?:TRS|PCB|[+-]?999|[-+]?(?:(?:[1-8]\d{2}|9\d[1-8]|[1-9]\d|\d)?(?:\.(?:0[1-9]|[1-9]\d|[1-9]))?))
- 匹配TRS
或PCB
或所需的数值(下面提供的分解)。要使其不区分大小写,请使用演示链接/i
[-]?999
- 匹配0 {或1次出现-
后跟999 (?:[1-8]\d{2}|9\d[1-8]|[1-9]\d|\d)?
- 匹配小数点前所需的3/2/1位数。它是可选的,因为我们可以有以小数点开头的值。(?:\.(?:0[1-9]|[1-9]\d))?
- 匹配小数点后的2位数。它也是可选的,以匹配积分值。 $
- 字符串结尾