我的字符串类似于以下内容:
4123499-TESCO45-123
every99999994_54
我想分别在每个字符串中提取最大的数字序列:
4123499
99999994
我之前尝试过正则表达式(我正在使用VB6)
Set rx = New RegExp
rx.Pattern = "[^\d]"
rx.Global = True
StringText = rx.Replace(StringText, "")
这让我在那里,但它只删除了非数字值,我最终看到第一个字符串:
412349945123
我可以找到能够满足我要求的正则表达式,还是我必须尝试其他方法?从本质上讲,我的模式必须是不是最长数字序列的任何东西。但我真的不确定这是否是一个合理的模式。有没有更好处理正则表达式的人能告诉我,如果我要去兔子洞吗?我感谢任何帮助!
答案 0 :(得分:3)
你只能用正则表达式来获得结果。您必须使用其他编程方法提取所有数字块并获得最长的数据块。
以下是一个例子:
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+
的{{1}}会找到所有数字块,然后在循环处理所有匹配后才会打印最长的数据块。
答案 1 :(得分:2)
这对RE本身无法解决。
相反,您可以简单地沿着追踪最长连续数字组的字符串:
@Entity
public class HousePrice {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int housePrice_id;
private double housePrice;
private double latitude;
private double longitude;
private int number_of_houses;
//constructors
// getters & setters
(第一个结果赢得平局)
答案 2 :(得分:1)
如果您提供的两个示例属于以下标准:
答案 3 :(得分:1)
请尝试。
纯VB。 没有外部库或对象。
没有突破性的正则表达式模式
没有字符串操作,所以 - 速度。的超高速。比regexp :)更快<〜30倍
轻松改变各种需求。
例如,将源字符串中的所有数字连接到单个字符串。
此外,如果目标字符串只是中间步骤,则 因此,只能用数字进行操作。
Public Sub sb_BigNmb()
Dim sSrc$, sTgt$
Dim taSrc() As Byte, taTgt() As Byte, tLB As Byte, tUB As Byte
Dim s As Byte, t As Byte, tLenMin As Byte
tLenMin = 4
sSrc = "every99999994_54"
sTgt = vbNullString
taSrc = StrConv(sSrc, vbFromUnicode)
tLB = LBound(taSrc)
tUB = UBound(taSrc)
ReDim taTgt(tLB To tUB)
t = 0
For s = tLB To tUB
Select Case taSrc(s)
Case 48 To 57
taTgt(t) = taSrc(s)
t = t + 1
Case Else
If CBool(t) Then Exit For ' *** EXIT FOR ***
End Select
Next
If (t > tLenMin) Then
ReDim Preserve taTgt(tLB To (t - 1))
sTgt = StrConv(taTgt, vbUnicode)
End If
Debug.Print "'" & sTgt & "'"
Stop
End Sub
如何处理sSrc = "ev_1_ery99999994_54"
,请自己制作:)