-2

I have strings like 10E4558AA0_String1_String2_String3_0_100_12mo. I want to pull out string1 and string2 and also 0 and 100.
The 0_100 could also be 0_10, 11_25, 26_75 or 76_100 and I'd want to pull out 0 10, 11 25, 26 75, 76 100, respectively. I think a regex would work but I am struggling with the coding part.

Jan
  • 42,290
  • 8
  • 54
  • 79
bill rowe
  • 43
  • 5

1 Answers1

0

via Split

Since your string is delimited by _ either a split command, but this varies from language to language.

Javascript would look something like str.split("_"), and more language examples of tokenizing a string could be found at rosettacode.org


via Regex Matching

To do this strictly via regular expression matching you can add in some string validation like in the following regex.

^([0-9a-f]+)_(string[^_]+)_(string[^_]+)_(string[^_]+)_([0-9]+)_([0-9]+)_([^_]+)$

Regular expression visualization

Example

Live Demo

https://regex101.com/r/yT4bR4/1

Sample text

10E4558AA0_String1_String2_String3_0_100_12mo

Sample Matches

[0][0] = 10E4558AA0_String1_String2_String3_0_100_12mo
[0][1] = 10E4558AA0
[0][2] = String1
[0][3] = String2
[0][4] = String3
[0][5] = 0
[0][6] = 100
[0][7] = 12mo

Explanation

NODE                     EXPLANATION
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    [0-9a-f]+                any character of: '0' to '9', 'a' to 'f'
                             (1 or more times (matching the most
                             amount possible))
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  _                        '_'
----------------------------------------------------------------------
  (                        group and capture to \2:
----------------------------------------------------------------------
    string                   'string'
----------------------------------------------------------------------
    [^_]+                    any character except: '_' (1 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \2
----------------------------------------------------------------------
  _                        '_'
----------------------------------------------------------------------
  (                        group and capture to \3:
----------------------------------------------------------------------
    string                   'string'
----------------------------------------------------------------------
    [^_]+                    any character except: '_' (1 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \3
----------------------------------------------------------------------
  _                        '_'
----------------------------------------------------------------------
  (                        group and capture to \4:
----------------------------------------------------------------------
    string                   'string'
----------------------------------------------------------------------
    [^_]+                    any character except: '_' (1 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \4
----------------------------------------------------------------------
  _                        '_'
----------------------------------------------------------------------
  (                        group and capture to \5:
----------------------------------------------------------------------
    [0-9]+                   any character of: '0' to '9' (1 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \5
----------------------------------------------------------------------
  _                        '_'
----------------------------------------------------------------------
  (                        group and capture to \6:
----------------------------------------------------------------------
    [0-9]+                   any character of: '0' to '9' (1 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \6
----------------------------------------------------------------------
  _                        '_'
----------------------------------------------------------------------
  (                        group and capture to \7:
----------------------------------------------------------------------
    [^_]+                    any character except: '_' (1 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \7
----------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
----------------------------------------------------------------------
Ro Yo Mi
  • 14,790
  • 5
  • 35
  • 43