2016-06-30 8 views
1

Wir haben Einzelhandelsdaten. Darin müssen wir jede Einheit SKUs zu Fall SKUs konvertieren BY Umrechnungsfaktor verwendet (dh Spalte 4) EingangsdatenWie schreibe ich Conditional Logic für Zeichenfolge mit Java

We have input data for 
Col1      COL2    COL3  COL4 col5 
ABHS-SMH-4OZ-01   EA    CS    12  1 
ABHK-SMH-01    EA    CS    24  1 

Erwartete Daten nach der Transformation:

Col1      COL2    COL3  COL4 col5 
ABHS-SMH-4OZ-12   EA     CS  12  1 
ABHK-SMH-24    EA     CS  24  1 

Wir versuchen, um die Transformation/bedingte Logik in Java zu schreiben.

Wir haben versucht, folgende regex so weit:

ich nach etwas suchen wollen

z.B. "ABHS-SMH-4OZ-01"

Suche nach "-01"

return "ABHS-SMH-4OZ-24"

Jede Hilfe würde geschätzt viel

This is my regex so far 

"ABHS-SMH-4OZ-01" .matches (". -01."); Vielen Dank im Voraus.

+0

Ja, es ist ...... – Jens

+0

Ja, es gibt viele Möglichkeiten, dies zu tun. Wenn du ein bisschen Zeit damit verbringen kannst, die Antwort selbst zu suchen, wird es eine gute Lernerfahrung für dich sein. Sie können anderen helfen, indem Sie die Antwort hier veröffentlichen. – shazinltc

+0

Was hast du bisher versucht? Wir sind hier, um Ihnen zu helfen, wenn Sie stecken bleiben, nicht nur Ihr Problem für Sie zu lösen – Mshnik

Antwort

2

Beschreibung

^(?=(?:(?:(\S+))\s+){4})(\S+-)01(?=\s) 

Regular expression visualization

** Um das Bild besser zu sehen, einfach rechts auf das Bild klicken, und wählen Sie Ansicht in einem neuen Fenster

Dieser reguläre Ausdruck folgendes tun:

  • Nach vorne schauen und erfassen den Wert in COL4 in Capture-Gruppe 1
  • Spiel der führenden Zeichen in COL1 bis zum letzten -01
  • Ersetzt den Wert in COL1 mit den führenden Zeichen mit dem Wert von COL4 gefolgt

Beispiel

Live Demo

Beispieltext

Col1      COL2    COL3  COL4 col5 
ABHS-SMH-4OZ-01   EA    CS    12  1 
ABHK-SMH-01    EA    CS    24  1 

Nach Ersatz

Col1      COL2    COL3  COL4 col5 
ABHS-SMH-4OZ-12   EA    CS    12  1 
ABHK-SMH-24    EA    CS    24  1 

Erklärung

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of the string 
---------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
---------------------------------------------------------------------- 
    (?:      group, but do not capture (4 times): 
---------------------------------------------------------------------- 
     (?:      group, but do not capture: 
---------------------------------------------------------------------- 
     (      group and capture to \1: 
---------------------------------------------------------------------- 
      \S+      non-whitespace (all but \n, \r, 
            \t, \f, and " ") (1 or more times 
            (matching the most amount 
            possible)) 
---------------------------------------------------------------------- 
     )      end of \1 
---------------------------------------------------------------------- 
    )      end of grouping 
---------------------------------------------------------------------- 
     \s+      whitespace (\n, \r, \t, \f, and " ") 
           (1 or more times (matching the most 
           amount possible)) 
---------------------------------------------------------------------- 
    ){4}      end of grouping 
---------------------------------------------------------------------- 
)      end of look-ahead 
---------------------------------------------------------------------- 
    (      group and capture to \2: 
---------------------------------------------------------------------- 
    \S+      non-whitespace (all but \n, \r, \t, \f, 
          and " ") (1 or more times (matching the 
          most amount possible)) 
---------------------------------------------------------------------- 
    -      '-' 
---------------------------------------------------------------------- 
)      end of \2 
---------------------------------------------------------------------- 
    01      '01' 
---------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
---------------------------------------------------------------------- 
    \s      whitespace (\n, \r, \t, \f, and " ") 
---------------------------------------------------------------------- 
)      end of look-ahead 
---------------------------------------------------------------------- 
+1

Wir haben diesen Ausdruck in Java versucht, es löst meinen Zweck: output_row.col1 = input_row.co1string (0, input_row.col1.lastIndexOf ("-") + 1) + input_row.col4; Danke für die Unterstützung und Bereitstellung einer schönen Lösung. Vielen Dank. – NEO

+0

Sicher Sache! Ich bin froh, dass ich helfen kann. Würde es Ihnen etwas ausmachen, die Antwort als ausgenommen zu markieren, wenn Sie zufrieden sind? –