表达式的正则表达式模式

时间:2019-06-11 12:20:03

标签: regex

我需要计算Excel单元格中提到的多个组的数量。单元格中有多个组名称,所有组都遵循某种模式。组名称被其他单词污染。每个组名称在一个单元格中的一行上。

虽然我能够弄清楚使用VBA创建函数进行计数的方式,但我仍在努力使用Regex模式,因此,最终数字有时包括非组,或者相反,不包括非组组。

Pattern = "(?=.*\d)[^\n " & Chr(34) & "]+"

以下是群组名称的模式:

3个大写字母 点 2个数字 点 4个大写字母 点 4个大写字母或3个大写字母和1个数字 点 任何长度和组合的任何内容(字母,点,数字,空格,大写或小写,下划线,破折号) 每个组在新行中 非团体可以以大写字母或小写字母开头,但可以肯定的是,它们不是全名,必须消除。

示例(所有波纹管都在Excel的单个单元格中找到)

初始设置

Please write
GTU.10.GENG.GENG.Cloudera_Admin
PRD.12.BFEN.SIDD.WD12LBE0550.Administrator
TST.16.SYWF.GEET.EU.R-Softw.10
Nested in
TST.10.SYWF.GEI1.AS.R
please rename
PRD.16.SYWF.AGIW.AS.W
PRD.16.SYWF.AGIW.AS.R
PRD.16.SYWF.AGIW.AS.W-ExclusionList

预期结果

GTU.10.GENG.GENG.Cloudera_Admin
PRD.12.BFEN.SIDD.WD12LBE0550.Administrator
TST.16.SYWF.GEET.EU.R-Softw.10
TST.10.SYWF.GEI1.AS.R
PRD.16.SYWF.AGIW.AS.W
PRD.16.SYWF.AGIW.AS.R
PRD.16.SYWF.AGIW.AS.W-ExclusionList

2 个答案:

答案 0 :(得分:1)

这可以做到:

[A-Z]{3}\.[0-9]{2}\.[A-Z]{4}\.[A-Z]{3}[A-Z0-9].*

请参见Regex101

答案 1 :(得分:0)

基于上面Zipa的正则表达式,这是自定义函数返回OP要求的内容的完整示例

'Use the Tools|References command in the VBA Editor to reference the library
'Microsoft VBScript Regular Expressions 5.5
Public Function strFilter(SubjectString)
    Dim myMatch As Match
    Dim myMatches As MatchCollection
    Dim myRegExp As RegExp
    Dim retString As String, bNewLine As Boolean
    ' initialise variables
    bNewLine = False
    retString = ""
    ' configure regex
    Set myRegExp = New RegExp
    myRegExp.Pattern = "[A-Z]{3}\.[0-9]{2}\.[A-Z]{4}\.[A-Z]{3}[A-Z0-9].*"
    ' this is needed for iterating over all matches
    myRegExp.Global = True
    ' execute RegEx match
    Set myMatches = myRegExp.Execute(SubjectString)
    For Each myMatch In myMatches
        If (bNewLine) Then
            ' not first match -> add newline now
            retString = retString & vbNewLine
        Else
            ' 1st match, no new line needed yet, but next match will require one
            bNewLine = True
        End If
        ' concat matches
        retString = retString & myMatch.Value
    Next
    'return filtered expression
    strFilter = retString
End Function