我已经在这个表情上挣扎了2天,所以我想我会从知识世界中寻求一些适当的帮助。我希望有人可以提供帮助。
这是我为了得到我想要的而建立的RegEx。
\S*\d*?-[A-Z]*[0-9]*
我只想要带有破折号的大写字母和数字,所以它确实得到GC-113
,AO-1-GC-113
,AO-2-GC-113
,这太棒了!
“我不希望这个------
,但这很好GC-113
,AO-1-GC-113
,AO-2-GC-113
”
但是如果我遇到一个数字之间没有空格的地方,而只是逗号或句号之间的另一个字符,那么它会在整个部分“GC-113,AO-1-GC-113,AO-2-GC-113
”上返回一个匹配
“我不希望这个------
,但这很好GC-113,AO-1-GC-113,AO-2-GC-113
”
我正在使用RegExBuddy尝试解决这个问题。
这是我正在使用的VBA代码获取匹配。
Public Function GetRIs(ByVal vstrInString As String) As Collection
Dim myRegExp As RegExp
Dim myMatches As Variant
Dim myMatch As Variant
Set GetRIs = New Collection
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "\S*\d*?-[A-Z]*[0-9]*"
Set myMatches = myRegExp.Execute(vstrInString)
For Each myMatch In myMatches
If myMatch.Value <> "" Then
GetRIs.Add myMatch.Value
End If
Next
End Function
谢谢! 戴夫
答案 0 :(得分:1)
您的\S*\d*?-[A-Z]*[0-9]*
模式甚至可以匹配单个连字符,因为只有-
是强制性的,其余的子模式可以匹配零次(可以在字符串中不存在)。
您可以使用
myRegExp.Pattern = "\b[A-Z0-9]+(?:-[A-Z0-9]+)+"
\b
- 一个单词边界(在下一个字母或数字之前必须有一个非单词字符或字符串的开头[A-Z0-9]+
- 一个或多个字母或数字(?:-[A-Z0-9]+)+
- 1个或多个序列:
-
- 连字符[A-Z0-9]+
- 一个或多个字母或数字