LordBoling Posted November 14, 2013 Share Posted November 14, 2013 (edited) Is it possible to left pad a matched group? Here is my situation. I am working on a program to integrate inventory from my companies warehouse with our website. Our part numbers in our Warehouse inventory look like this: 1501895, 1000973, 5000165, 6000002, etc. On our website, these same numbers would look like this: 15-1895, 1-973,5-165, 6-02 My program monitors our warehouse inventory database for changes, and when a change is made it needs to find the matching item on our website. This is the code that I originally used: StringRegExpReplace($new_items[$i][0],"([1-9]{1,2})(0*)(\d{1,4})","$1-$3") However I noticed this does not work for numbers that match my last example. The last matched group needs to be zero padded if the number is less than 10. Does anyone have an idea of where to start for this? Is there a better way than how I have started? Edited November 14, 2013 by LordBoling Link to comment Share on other sites More sharing options...
Kidney Posted November 14, 2013 Share Posted November 14, 2013 could you give an example of what one of these numbers would be that does not work with your script currently?? Link to comment Share on other sites More sharing options...
jdelaney Posted November 14, 2013 Share Posted November 14, 2013 #include <Array.au3> Local $aValues[4][2]=[["1501895",""],["1000973",""],["5000165",""],["6000002",""]] For $i = 0 To UBound($aValues)-1 $aTemp = StringRegExp($aValues[$i][0],"([1-9]{1,2})(0*)(\d{1,4})",3) If StringLen($aTemp[2]) = 1 Then $aTemp[2] = 0 & $aTemp[2] $aValues[$i][1] =$aTemp[0] & "-" & $aTemp[2] ConsoleWrite($aValues[$i][1] & @CRLF) Next IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window. Link to comment Share on other sites More sharing options...
kylomas Posted November 14, 2013 Share Posted November 14, 2013 LB, Non-SRE solution... #include <string.au3> Local $aWebValues[4]=["15-1895", "1-973","5-165", "6-02"] For $1 = 0 To UBound($aWebValues)-1 $aWebValues[$1] = stringreplace($aWebValues[$1],'-',_stringrepeat('0',8-stringlen($aWebValues[$1]))) ConsoleWrite($aWebValues[$1] & @CRLF) Next kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
Solution corgano Posted November 14, 2013 Solution Share Posted November 14, 2013 (edited) would not this work? StringRegExpReplace($new_items[$i][0],"([1-9]{1,2})(0*)(\d{2,4})","$1-$3") changed the third one to d{2,4} because you want at least two digits? Also, http://gskinner.com/RegExr/. Save it, bookmark it, love it. It's like the SciTE of regex Edited November 14, 2013 by corgano jdelaney and LordBoling 2 0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e Link to comment Share on other sites More sharing options...
LordBoling Posted November 14, 2013 Author Share Posted November 14, 2013 Kidney: Sorry if I was not clear. My last example, 6000002, is an example of a number that did not work with my code. jdelaney: Thank you! Your solution works perfectly. I was just too focused on RegExReplace and didn't think about using the standard RegEx to return an array. kylomas: Thank you as well. I am not sure what Non-SRE stands for, but your solution works great when I need to check numbers from the website. corgano: Well, I guess I should have tried that. It was the first thing that I considered, but I thought (0*) is a greedy match and that it would stop the next group from selecting a 0. Instead of assuming I should have checked. That is the simplest solution to my problem I believe. I appreciate everyone getting back to me so quickly. Link to comment Share on other sites More sharing options...
Malkey Posted November 14, 2013 Share Posted November 14, 2013 And using StringFormat function to determine the number of zeros. Local $new_items[4][2] = [["15-1895", ""],["1-973", ""],["5-165", ""],["6-02", ""]] For $i = 0 To UBound($new_items) - 1 $aTemp = StringSplit($new_items[$i][0], "-", 2) $new_items[$i][0] = StringFormat("%i%0" & (7 - StringLen($aTemp[0])) & "i", $aTemp[0], $aTemp[1]) ConsoleWrite($new_items[$i][0] & @CRLF) Next Link to comment Share on other sites More sharing options...
kylomas Posted November 14, 2013 Share Posted November 14, 2013 LB, non-SRE = not string regular expression. At some point you need to render one of your numbers to match the format of the other. Offered a solution looking at it from the "other" side... Good Luck, kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
corgano Posted November 14, 2013 Share Posted November 14, 2013 Yaaay! My first answered I would like to thank my mom, and the bloke who wrote RegExr I <3 RegExr 0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now