[Gambas-user] RegExp: How to find all matches of a pattern (global match)?
Gianluigi
gradobag at gradobag.it
Tue Aug 22 11:55:57 CEST 2023
Il 22/08/23 00:34, T Lee Davidson ha scritto:
> On 8/21/23 11:16, Gianluigi wrote:
>> I don't know what's behind the Python code, probably a loop since
>> that's what C seems to do.
>
> No, Python doesn't use a loop; it has a Findall function. It is quite
> simple and works as one would expect.
>
> [code]
> import re
>
> f = open("file_with_ip_addresses.txt")
> addresses = re.findall( "((?:[0-9]{1,3}\\.){3}[0-9]{1,3})", f.read() )
> for ip in addresses:
> print(ip)
> [/code]
>
Hi Lee,
While we wait for Benoit, let me happy and try my simple function and
tell me if it is so slow that it is snubbed.
I attach the test project (no effort required) :-)
Regards
Gianluigi
Public Sub Main()
Dim sText As String = File.Load("./Text1")
' Dim sExp As String = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"
Dim sExp As String = "((?:[0-9]{1,3}\\.){3}[0-9]{1,3})"
' Dim sExp As String =
"(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
Dim s As String
For Each s In SimpleFindAll(sExp, sText)
Print s
Next
End
Private Sub SimpleFindAll(sPattern As String, sText As String) As String[]
Dim aReturn As New String[]
Dim aSplit As String[]
Dim hRegExp As New RegExp
hRegExp.Compile(sPattern)
Try hRegExp.Exec(sText)
If Error Then
Print "#ERROR"
Return aReturn
Endif
aSplit = Split(sText, "\n", Null, True)
For i As Integer = 0 To aSplit.Max
hRegExp.Exec(aSplit[i])
If hRegExp.Text Then aReturn.Push(hRegExp.Text)
Next
Return aReturn
End
More information about the User
mailing list