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"]]
>Solution :
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,HorizontalsorOnshorewords(?:_(Ultimate))?– an optional sequence of an underscore and anUltimateword_– 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