我有像

View_Export_US_Horizontals_Ultimate_DirectionalSurveys

我想提取匹配项,比如

[["US_Horizontals", "Ultimate", "DirectionalSurveys"]] //String Ultimate may or may not be present

我有下面的正则表达式,/^View_Export_(US\_(GoM|Horizontals|Onshore))((_Ultimate)?)_(\w+)/

但我得到以下匹配数组

[["US_Horizontals", "Horizontals", "_Ultimate", "_Ultimate", "DirectionalSurveys"]]

如何跳过Horizontals&之类的字符串;_Ultimate然后得到一个数组,比如

[["US_Horizontals", "Ultimate", "DirectionalSurveys"]]

[["US_Horizontals", "DirectionalSurveys"]]

推荐答案

你可以用

\AView_Export_(US_(?:GoM|Horizontals|Onshore))(?:_(Ultimate))?_(\w+)

regex demo.Details:

  • \A-字符串的开头(Ruby正则表达式中的^表示任何行的开头)
  • View_Export_-固定字符串
  • (US_(?:GoM|Horizontals|Onshore))-第一组:US_个字符串,然后是GoMHorizontalsOnshore个单词
  • (?:_(Ultimate))?-下划线和Ultimate单词的可选序列
  • _-下划线
  • 第三组:任何一个或多个单词字符.

参见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

Ruby相关问答推荐

try 安装Chruby时出现问题,终端问题

如何使用 gsub 删除返回字符串中的/和/i?

为什么数组中的 splat 如此昂贵?

在Ruby中将关键字与常规参数混合?

如何在没有 Web 服务器的情况下从命令行执行 ruby​​ 模板文件 (ERB)?

在 Ruby 中,如何确定字符串是否不在数组中?

Ruby 中是否有像 C 中一样的主要方法?

判断 Ruby HTTP 响应是否成功

在 Pry 中有相当于 next 的吗?

array.include?多个值

对于基于 GitHub 的 gem,强制Bundle 安装使用 https:// 而不是 git://

如何在 Ruby 中创建可重用的块/proc/lambda?

如何获取当前 rake 任务的 PID?

向实例对象添加方法

我可以在 OS X v10.6.8 上升级到当前版本的 Ruby (2.2.3) 吗?

相当于 Ruby 的 cURL?

如何解决/usr/bin/env: ruby​​_executable_hooks: No such file or directory?

Ruby Activerecord IN 子句

Docker for Mac - mkmf.rb 找不到 ruby​​ 的头文件

带有类名的动态类定义