【问题标题】:Regex- to get part of String正则表达式-获取字符串的一部分
【发布时间】:2021-09-27 10:17:30
【问题描述】:

我有以下字符串,我需要获取 Pizzahut:| 之间的所有值。

ABC:2fg45rdvsg|Pizzahut:j34532jdhgj|Dominos:3424232|Pizzahut:3242237|Wendys:3462783|Pizzahut:67688873rg|

我有 RegExpression .scan(/(?<=Pizzahut:)([.*\s\S]+)(?=\|)/) 但它可以获取

"j34532jdhgj|Dominos:3424232|Pizzahut:3242237|Wendys:3462783|Pizzahut:67688873rg|"

结果应该是: 34532jdhgj,3242237,67688873rg

【问题讨论】:

  • 你可以使用s.scan(/Pizzahut:([^|]+)/).flatten,见this Ruby demo

标签: regex ruby workato


【解决方案1】:

我不确定您为什么要在这里跳到 regex 解决方案;该输入字符串在我看来显然是结构化的,您可能会通过在分隔符上将其拆分以将其转换为 更方便的数据结构来做得更好。

类似这样的:

input = "ABC:2fg45rdvsg|Pizzahut:j34532jdhgj|Dominos:3424232|Pizzahut:3242237|Wendys:3462783|Pizzahut:67688873rg"

converted_input = input
  .split('|') #=> ["ABC:2fg45rdvsg", "Pizzahut:j34532jdhgj", ... ]
  .map { |pair| pair.split(':') } #=> [["ABC", "2fg45rdvsg"], ["Pizzahut", "j34532jdhgj"], ... ]
  .group_by(&:first) #=> {"ABC"=>[["ABC", "2fg45rdvsg"]], "Pizzahut"=>[["Pizzahut", "j34532jdhgj"], ... ], "Dominos"=>[["Dominos", "3424232"]], ... ]
  .transform_values { |v| v.flat_map(&:last) }

(上述一系列转换只是一种可能的方式;您可能会想出十几个类似的替代步骤来将此输入转换为如下所示的相同哈希!例如,通过使用reduce甚至@987654323 @图书馆。)

这会给你最终的结果:

converted_input = {
  "ABC" => ["2fg45rdvsg"],
  "Pizzahut" => ["j34532jdhgj", "3242237", "67688873rg"],
  "Dominos" => ["3424232"],
  "Wendys" => ["3462783"]
}

现在数据的格式已经很方便了,像你原来的请求那样获取数据就变得很简单了:

converted_input["Pizzahut"].join(',') #=> "j34532jdhgj,3242237,67688873rg"

(虽然很可能将其保留为Array,而不是逗号分隔的String 更合适!!)

【讨论】:

    【解决方案2】:

    你可以使用

    s='ABC:2fg45rdvsg|Pizzahut:j34532jdhgj|Dominos:3424232|Pizzahut:3242237|Wendys:3462783|Pizzahut:67688873rg|'
    p s.scan(/Pizzahut:([^|]+)/).flatten
    # => ["j34532jdhgj", "3242237", "67688873rg"]
    

    参见this Ruby demoRubular demo

    您似乎不可能将 Pizzahut 作为另一个单词的一部分,但可以使用带有单词边界的版本 /\bPizzahut:([^|]+)/

    Pizzahut:([^|]+)Pizzahut: 匹配,然后将除管道之外的任何一个或多个字符(使用 ([^|]+))捕获到第 1 组。

    请注意,String#scan 仅在模式包含捕获组时才返回捕获,因此您不需要使用环视。

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多