Jump to content
123disconnect

Help me with pattern in StringRegExp

Recommended Posts

I have code

$pattern = 
$str = "%abcd% = Section, hardwareID_1, hardwareID_2, ..... ,HardwareID_n"
$array = StringRegExp( $str, $pattern, 3)

Anyone help me with $pattern value 

I need $array is : 

$array[0] = 'abcd'

$array[1] = 'HardwareID_1'

$array[2] = 'HardwareID_2'

.......

$array[n] = 'HardwareID_n'

No whitespace in all return string . (Sorry for my English)

Thank you verymuch

 

Edited by 123disconnect

Share this post


Link to post
Share on other sites

Maybe this way

#include<array.au3>
$pattern = '%(\w+)%|,\s*(\w+)'
$str = "%abcd% = Section, hardwareID_1, hardwareID_2, ..... ,HardwareID_n"
$array = StringRegExp($str, $pattern, 3)
ConsoleWrite(_ArrayToString($array) & @CRLF)

 


Scripts & functions Organize Includes Let Scite organize the include files

Yahtzee The game "Yahtzee" (Kniffel, DiceLion)

LoginWrapper Secure scripts by adding a query (authentication)

_RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...)

Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc.

MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times

Share this post


Link to post
Share on other sites

Works good Xeno except seems to to produce line extra array elements between the results.

Probably can be fixed in the regex, but I would probably just strip it like this:

#Include <Array.au3>
#Include <StringConstants.au3>

$sPattern = '%(\w+)%|,\s*(\w+)'
$sString = "%abcd% = Section, hardwareID_1, hardwareID_2, ..... ,HardwareID_n"
$aArray = StringRegExp($sString, $sPattern, $STR_REGEXPARRAYGLOBALMATCH)
$sString2 = _ArrayToString($aArray, "|")
$sString2 = StringReplace($sString2, "||", "|")
$aArray2 = StringSplit($sString2, "|", $STR_NOCOUNT)
_ArrayDisplay($aArray2)

 

Share this post


Link to post
Share on other sites

Please manage the character set [\w.#] depending on the syntax of the elements to get  :)

#include<array.au3>

$pattern = '(?<=%|,)\s*([\w.#]+)'

$str = "%abcd% = Section, hardwareID_#1, hardwareID_2, ..... ,HardwareID_n"
$array = StringRegExp($str, $pattern, 3)
 _ArrayDisplay($array)

 

Edited by mikell

Share this post


Link to post
Share on other sites

Sorry, I just did a quick answer. I did oversee the ||.
So, mikells solution is more correct.

 


Scripts & functions Organize Includes Let Scite organize the include files

Yahtzee The game "Yahtzee" (Kniffel, DiceLion)

LoginWrapper Secure scripts by adding a query (authentication)

_RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...)

Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc.

MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times

Share this post


Link to post
Share on other sites

Xenobiologist's regex works, but must be enclosed in a duplicate subpattern group :

#include <array.au3>
$pattern = '(?|%(\w+)%|,\s*(\w+))'
$str = "%abcd% = Section, hardwareID_1, hardwareID_2, ..... ,HardwareID_n"
$array = StringRegExp($str, $pattern, 3)

_ArrayDisplay($array)

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By jmp
      i am trying to get number from string using this code :
      #include <IE.au3> $oIE = _IEAttach ("Edu.corner") Local $aName = "Student name & Code:", $iaName = "0" Local $oTds = _IETagNameGetCollection($oIE, "td") For $oTd In $oTds If $oTd.InnerText = $aName Then $iaName = $oTd.NextElementSibling.InnerText $iGet = StringRegExpReplace($iaName, "\D", "") EndIf Next MsgBox(0, "", $iGet) it was get number like 52503058
      But, I want to get only student code 5250. (Different student have different code, sometime its 3 digits, Sometime 4)

       
    • By BlueBandana
      Is there a way to output the regex matches into a file?
      I have a script to compare two files and check for regex matches.
      I want to output the matching regex of 'testexample.txt' to another file.
      #include <MsgBoxConstants.au3> #include <Array.au3> $Read = FileReadToArray("C:\Users\admin\Documents\testexample.txt") $Dictionary = FileReadToArray("C:\Users\admin\Documents\example.txt") For $p = 0 To UBound($Dictionary) - 1 Step 1 $pattern = $Dictionary[$p] For $i = 0 To UBound($Read) - 1 Step 1 $regex = $Read[$i] If StringRegExp($regex, $pattern, 0) Then MsgBox(0, "ResultsPass", "The string is in the file, highlighted strings: " ) Else MsgBox(0, "ResultsFail", "The string isn't in the file.") EndIf Next Next  
    • By therks
      So I have this pattern: 
      ^(?:(\d+)|(\d+):(\d+)|(\d+):(\d+):(\d+))$ And I'm expecting (depending on input) to get a 1, 2 or 3 index array (or @error for invalid input).
      But instead I get this:
      #include <Debug.au3> Func Test($String) _DebugArrayDisplay(StringRegExp($String, '^(?:(\d+)|(\d+):(\d+)|(\d+):(\d+):(\d+))$', 1)) EndFunc Test('10') ; Results (normal, expected): ; Row 0|10 Test('10:20') ; Results (extra blank index): ; Row 0| ; Row 1|10 ; Row 2|20 Test('10:20:30') ; Results (three blank indices): ; Row 0| ; Row 1| ; Row 2| ; Row 3|10 ; Row 4|20 ; Row 5|30 Is this normal? Should I just code around it, or is there a better way to do what I'm looking for?
      I also tried reversing my regex, but it was even uglier results:
      #include <Debug.au3> Func Test($String) _DebugArrayDisplay(StringRegExp($String, '^(?:(\d+):(\d+):(\d+))|(\d+):(\d+)|(\d+)$', 1)) EndFunc Test('10') ; Results (yuck): ; Row 0| ; Row 1| ; Row 2| ; Row 3| ; Row 4| ; Row 5|10 Test('10:20') ; Results (slightly better): ; Row 0| ; Row 1| ; Row 2| ; Row 3|10 ; Row 4|20 Test('10:20:30') ; Results (nice): ; Row 0|10 ; Row 1|20 ; Row 2|30  
    • By Deye
      Hi,
      I want to add any needed conditions to the StringRegExp command so it can pull out only  "File.au3", "WinAPIFiles.au3", "Test.bmp" into the array
      #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include 'WinAPIFiles.au3' #include "File.au3" ; Script Start - Add your code below here Local $bFileInstall = False ; Change to True and ammend the file paths accordingly. ; This will install the file C:\Test.bmp to the script location. If $bFileInstall Then FileInstall("C:\Test.bmp", @ScriptDir & "\Test.bmp") $sFile = FileRead(@ScriptFullPath) $aResults = StringRegExp($sFile, "(?i)(FileInstall\s*|include\s*)(.*)", 3) _ArrayDisplay($aResults) Thanks In Advance
      Deye
    • By FroVN
      i have a text : <Name>Jonh</Name>.<Age>15</Age>
      how i can get Jonh and 15 in one stringregexp? pls give me example
×
×
  • Create New...