regex - 从字符串中提取最大的数字序列(正则表达式,还是?)

标签 regex vba vb6

我有类似于以下的字符串:

 4123499-TESCO45-123
 every99999994_54

我想分别提取每个字符串中最大的数字序列:
 4123499
 99999994

我以前尝试过正则表达式(我使用的是 VB6)
 Set rx = New RegExp
 rx.Pattern = "[^\d]"
 rx.Global = True

 StringText = rx.Replace(StringText, "")

这让我走到了一半,但它只删除了非数字值,我最终得到了第一个字符串,如下所示:
412349945123

我能找到一个正则表达式来满足我的需求,还是我必须尝试另一种方法?本质上,我的模式必须是任何不是最长数字序列的东西。但我实际上不确定这是否是一个合理的模式。任何对正则表达式有更好处理能力的人都可以告诉我我是否会陷入困境?我感谢任何帮助!

最佳答案

您不能仅通过正则表达式获得结果。您必须提取所有数字块并使用其他编程方法获得最长的块。

下面是一个例子:

Dim strPattern As String: strPattern = "\d+"
Dim str As String: str = "4123499-TESCO45-123"
Dim regEx As New RegExp
Dim matches  As MatchCollection
Dim match As Match
Dim result As String

With regEx
     .Global = True
     .MultiLine = False
     .IgnoreCase = False
     .Pattern = strPattern
End With

Set matches = regEx.Execute(str)
For Each m In matches
  If result < Len(m.Value) Then result = m.Value
Next

Debug.Print result
\d+RegExp.Global=True将找到所有数字块,然后在循环处理所有匹配项后仅打印最长的块。

关于regex - 从字符串中提取最大的数字序列(正则表达式,还是?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49363411/

相关文章:

javascript - 无法解析 - Javascript 中的正则表达式

javascript - 正则表达式允许负值最多保留 4 位小数

excel - 如何在 VBA 中过滤 '' ő'' 字符?

vb6 - 从函数返回空 UDT

c# - 在 VB6 应用程序中,C# dll 的 CreateObject 仅在 IDE 中失败并显示 "ActiveX component can' t create object

vb.net - OCX控制: Sub New() is not accessible in this context because it is 'Private'

ruby-on-rails - Ruby on Rails 单元测试在日期测试中失败

javascript - 使用普通 JavaScript 的动态文本字符串中的上标美分

vba - 在VBA中这两种使用循环的方式的时间复杂度有什么区别?

excel - 查找特定文本、选择并突出显示