我需要计算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
答案 0 :(得分:1)
答案 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