I have strings like
View_Export_US_Horizontals_Ultimate_DirectionalSurveys
I want to extract matches like
[["US_Horizontals", "Ultimate", "DirectionalSurveys"]] //String Ultimate may or may not be present
I have the following RegEx, /^View_Export_(US\_(GoM|Horizontals|Onshore))((_Ultimate)?)_(\w )/
but i get the following matches array
[["US_Horizontals", "Horizontals", "_Ultimate", "_Ultimate", "DirectionalSurveys"]]
How do i skip strings like Horizontals
& _Ultimate
and just get an array like
[["US_Horizontals", "Ultimate", "DirectionalSurveys"]]
Or
[["US_Horizontals", "DirectionalSurveys"]]
CodePudding user response:
You can use
\AView_Export_(US_(?:GoM|Horizontals|Onshore))(?:_(Ultimate))?_(\w )
See the regex demo. Details:
\A
- start of string (^
in Ruby regex means start of any line)View_Export_
- a fixed string(US_(?:GoM|Horizontals|Onshore))
- Group 1:US_
string and then eitherGoM
,Horizontals
orOnshore
words(?:_(Ultimate))?
- an optional sequence of an underscore and anUltimate
word_
- an underscore(\w )
- Group 3: any one or more word chars.
See the Ruby demo:
string = "View_Export_US_Horizontals_Ultimate_DirectionalSurveys"
rx = /\AView_Export_(US_(?:GoM|Horizontals|Onshore))(?:_(Ultimate))?_(\w )/
one, two, three = string.match(rx).captures
puts one #=> US_Horizontals
puts two #=> Ultimate
puts three #=> DirectionalSurveys