【发布时间】:2016-03-08 17:19:39
【问题描述】:
我已经为这个表达挣扎了 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
谢谢! 戴夫
【问题讨论】:
-
感觉你在找
\w+(?:-\w+)* -
@DaveStuart - 使用 VBA 代码编辑您的原始帖子。我也格式化了你的问题。如果任何内容的格式不正确(“我不想要这个 [...]”),请正确格式化。
-
Wiktor,那个人得到了所有的文字。我正在寻找更具体的正则表达式来将这 3 种组合从 GC-113、AO-1-GC-113、AO-2-GC-113 中提取出来。
-
你的意思是你只想要一个
[A-Z0-9]+(?:-[A-Z0-9]+)+?提示:当您在评论中称呼 SO 用户时,请始终在用户名前添加@,以便用户收到回复通知。