Jump to content

RegeX Help


Recommended Posts

The last part of my string is in any of the below formats :
productCode-quantity pairs and discount

Max number of pairs will be 5 always separated by hyphen
In some cases , less than 5 pairs , followed by either - or <blank>. Number of loose hyphens or spaces is not always consistent.
Always followed by a unpaired number

$input = 2-3 3-2 4-1 5-2 5
$input = 2-3 3-2 4-1 5-2 - 6
$input = 2-3 3-2 4-1 - - 6
$input = 2-3 3-2 4-1  6
$input = 7-3 9-4 6-4 5-4 3-4 5
$input = 4-4 6-3 3-3 2-2 - 4
$input = 14-3 16-2 13-1 12-3 10-1 4
$input = 14-3 16-2 13-1 12-3 10-1 12
$input = 2-3 3-2 4-1 -  6


i want to obtain result such
$productCode[1] = first digit of pair
$productCode[2] = first digit of pair
$productCode[5] = first digit of pair

$quantity[1] = second digit of pair
$quantity[2] = second digit of pair
$quantity[5] = second digit of pair

$discount = last number

In case , less than 5
make $productCode[4] = "-"

 

 

 

Trying to use ,

$line_read = StringRegExpReplace($line_read, "(\h([\d]|[\d][\d])[-]([\d]|[\d][\d])\K(?=\h)", "|")
    $line_read = StringRegExpReplace($line_read, "\h\K(?=[\d][-][\d]", "|")

Struggling with regex.

To border it with | , then shall use sting split to seperate the two.
Please help , and how to handle the cases where there is less than 5 products.

 

 

Question  2 :

    $line_read = StringRegExpReplace($line_read, "([\d]|[\d][\d])[\h]\April[\h][\d][\d][\d][\d]\K(?=\h)", "|")
     $line_read = StringRegExpReplace($line_read, "\h\K(?=([\d]|[\d][\d])[\h]\April[\h][\d][\d][\d][\d])", "|")

This does not work for April , how to manage the \A.

 

Question  3 :

Please advise best way to surround a regex match with |
Say I wish to find any email address , and if found surround it with | on both side.
ALso , Can it be done to limit the search from and to certain point in the entire line and from right to left.

 

 

 

 

 

Link to comment
Share on other sites

?

#Include <Array.au3>

;$s = "2-3 3-2 4-1 - -   6"
$s = "14-3 16-2 13-1 12-3 10-1 12"

$a = StringRegExp($s, '(?|(\d+)-(\d+)|\d+(?=$))', 3)
;_ArrayDisplay($a)

$n = (UBound($a)-1)/2  ; nb of pairs
Local $res[$n][3] 
For $i = 0 to $n-1
    $res[$i][0] = $a[$i*2]   ; col 0 = productCode
    $res[$i][1] = $a[$i*2+1] ; col 1 = quantity
Next
$res[0][2] = $a[$n*2]        ; col 2 = discount

_ArrayDisplay($res)

 

Link to comment
Share on other sites

20 hours ago, mikell said:

?

#Include <Array.au3>

;$s = "2-3 3-2 4-1 - -   6"
$s = "14-3 16-2 13-1 12-3 10-1 12"

$a = StringRegExp($s, '(?|(\d+)-(\d+)|\d+(?=$))', 3)
;_ArrayDisplay($a)

$n = (UBound($a)-1)/2  ; nb of pairs
Local $res[$n][3] 
For $i = 0 to $n-1
    $res[$i][0] = $a[$i*2]   ; col 0 = productCode
    $res[$i][1] = $a[$i*2+1] ; col 1 = quantity
Next
$res[0][2] = $a[$n*2]        ; col 2 = discount

_ArrayDisplay($res)

 

Wow , Thanks. Shall try and let you know.

Link to comment
Share on other sites

@mikell ,

 

It is working very well.
Can you help me put it in this format :
|3-2|2-3|14-5|6-4|99-99|99-99|5
deleting/replacing the existing occurrence is seeming difficult.
Trimming out the dangling hyphens and spaces left and right.

UMRD LOS BANOS CA 6036195773 2-3 4-4 1-3 --5
will become :
UMRD LOS BANOS CA 6036195773|2-3|4-4|1-3|99-99|99-99|5


The last digit being the discount.
This will come at the end of my line.

I changed the array size , as there always have to be 5 , (Local $res[5][3]) ,  records. In case original data has lesser , fill up the rest with 99.

$a = StringRegExp($lastsegment, '(?|(\d+)-(\d+)|\d+(?=$))', 3)
    $n = (UBound($a)-1)/2  ; nb of pairs
    Local $res[5][3]
    If $n > 1 Then
    For $i = 0 to $n-1
    $res[$i][0] = $a[$i*2]   ; col 0 = productCode
    $res[$i][1] = $a[$i*2+1] ; col 1 = quantity
    Next
    $res[0][2] = $a[$n*2]        ; col 2 = discount
    For $j=$n to 4 Step 1
    $res[$j][0] = "99"   ; col 0 = productCode
    $res[$j][1] = "99" ; col 1 = quantity
    Next
   EndIf

 

Link to comment
Share on other sites

??

$string = "UMRD LOS BANOS CA 6036195773 2-3 4-4 1-3 --5"

$s = StringRegExpReplace($string, '.*?(\h\d+-\d+[\h\d-]+\d$)', "$1")
;Msgbox(0,"", $s)
$b = StringRegExp($s, '(\d+-\d+)|\d+(?=$)', 3)
;_ArrayDisplay($b)
Local $n = UBound($b)-1, $res = ""
For $i = 0 to 4
   $res &= "|" & ($i<$n ? $b[$i] : "99-99")
Next
$res &= "|" & $b[$n]
;Msgbox(0,"", $res)

Msgbox(0,"", StringReplace($string, $s, $res) )

 

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...