regex = %r{\A/BAI/(557|500)/SEPA DD (CREDITOR|CDTR|DEBTOR).*(/| )(?<end_to_end_id>((ST)?(\.|:)?(R(14|16|26))?(.|:)?(na|NA|nt|NT).?[0-9a-zA-Z]{5,}?(.|:|RAN)[0-9a-zA-Z]{5,}?))(/| |$)} string_to_check = "/BAI/145/SEPA DD CREDITOR CORE/PT/FT/ROC/STR16NAOX0JZC9WQUERZKRAN0LYC5JURTL/PY/AmazonPrime/BNC/DE24ZZZ00000561652/BN/Amazon EU SARL/BO/NL56ABNA0474948994/BO1/CUSTOMER NAME/BO2/38 AVENUE JOHN F KENNEDY/BO3/1855 LUXEMBOURG/BI/IE30CITI99005132956548/MREF/RCSAHS5XSEKAP64W/SCID/SEPA/DSEQ/RCUR/LOCI/CORE/OA/EUR2,99/AB/STTOIE22/OB/ABNANL2A/REF/EREF" if match = regex.match(string_to_check) puts "The string matches the pattern" puts "Value of named group 'end_to_end_id': #{match[:end_to_end_id]}" else puts "The string does not match the pattern" end