我有两个函数可以提取确切的字符序列,但是我无法加入这些函数。
是否可以将它们放在一起?
我尝试了一些方法,但总是返回错误。
Public Function ExtraiNúmCNJ(Texto As Variant) As String
Application.Volatile True
With CreateObject("VBScript.Regexp")
.Global = False
.Pattern = "\d{7}\s*\.?\s*\d{2}\s*\.?\s*\d{4}\s*\.?\s*\d\s*\.?\s*\d{2}\s*\.?\s*\d{4}"
If .test(Texto) Then
ExtraiNúmCNJ = .Execute(Texto)(0)
.Global = True:
.Pattern = "\D"
ExtraiNúmCNJ = Format(.Replace(ExtraiNúmCNJ, ""), "0000000\-00\.0000\.0\.00\.0000")
End If
End With
End Function
Public Function ExtraiNúmAntigo(Texto As Variant) As String
Application.Volatile True
With CreateObject("VBScript.Regexp")
.Global = False
.Pattern = "\d{4}\s*\.?\s*\d{2}\s*\.?\s*\d{6}\s*\.?\s*\d{1}"
If .test(Texto) Then
ExtraiNúmAntigo = .Execute(Texto)(0)
.Global = True:
.Pattern = "\D"
ExtraiNúmAntigo = Format(.Replace(ExtraiNúmAntigo, ""), "0000\.00\.000000\.0")
End If
End With
End Function
我试图通过拉出两种类型的数字而只保留一种功能。
答案 0 :(得分:1)
这应该可以解决问题。
Public Function ExtraiNúm(Texto As Variant) As String
Application.Volatile True
Dim regexCNJ As Object
Set regexCNJ = CreateObject("vbscript.regexp")
With regexCNJ
.Global = False
.MultiLine = True
.IgnoreCase = False
.pattern = "\d{7}\s*\-?\s*\d{2}\s*\.?\s*\d{4}\s*\.?\s*\d\s*\.?\s*\d{2}\s*\.?\s*\d{4}|\d{7}\s*\.?\s*\d{4}\s*\.?\s*\d\s*\.?\s*\d{2}\s*\.?\s*\d{4}"
End With
Dim regexAntigo As Object
Set regexAntigo = CreateObject("vbscript.regexp")
With regexAntigo
.Global = False
.MultiLine = True
.IgnoreCase = False
.pattern = "\d{4}\s*\.?\s*\d{2}\s*\.?\s*\d{6}\s*\.?\s*\d{1}"
End With
Select Case True
Case regexCNJ.test(Texto)
Texto = regexCNJ.Execute(Texto)(0)
Case regexAntigo.test(Texto)
Texto = regexAntigo.Execute(Texto)(0)
End Select
ExtraiNúm = Texto
End Function
答案 1 :(得分:0)
按照@ Marcucciboy2和@JNevill的技巧,我最终得到了期望的结果。
我添加了“ |”在.Pattern和第10行中,我使用了“ ExtraiNumProc = Trim(ExtraiNumProc)”。
Public Function ExtraiNumProc(Texto As Variant) As String
Application.Volatile True
With CreateObject("VBScript.Regexp")
.Global = False
.Pattern = "\d{7}\s*\.?\s*\d{2}\s*\.?\s*\d{4}\s*\.?\s*\d\s*\.?\s*\d{2}\s*\.?\s*\d{4}|\d{7}\s*\-?\s*\d{2}\s*\.?\s*\d{4}\s*\.?\s*\d\s*\.?\s*\d{2}\s*\.?\s*\d{4}|\d{4}\s*\.?\s*\d{2}\s*\.?\s*\d{6}\s*\.?\s*\d{1}|\d{4}\s*\.?\s*\d{2}\s*\.?\s*\d{6}\s*\-?\s*\d{1}"
If .test(Texto) Then
ExtraiNumProc = .Execute(Texto)(0)
.Global = True:
.Pattern = "\D"
ExtraiNumProc = Trim(ExtraiNumProc)
End If
End With
End Function
结果是这样的: