繁体   English   中英

如何在Ruby中拆分包含集合的字符串?

[英]How to split a string that contains a set in Ruby?

我是新来的论坛。 我目前正在尝试使用以下字符串:

65101km,Sedan,Manual,18131A,FWD,Used,5.5L/100km,Toyota,camry,SE,{AC,Heated Seats, Heated Mirrors, Keyless Entry},2010

并将其拆分以获取此信息:

65101km
Sedan
Manual
18131A
FWD
Used
5.5L/100km
Toyota
camry
SE
{AC, Heated Seats, Heated Mirrors, Keyless Entry}
2010

我有以下正则表达式:

data_from_file.split(/[{},]+/)

但是我很难保留下来。

有任何想法吗?

str = "65101km,Sedan,Manual,18131A,FWD,Used,5.5L/100km,Toyota,camry,SE,{AC,Heated Seats, Heated Mirrors, Keyless Entry},2010"

r = /
    (?<=\A|,)  # match the beginning of the string or a comma in a positive lookbehind
    (?:        # begin a non-capture group
      {.*?}    # match an open brace followed by any number of characters,
               # lazily, followed by a closed brace
      |        # or
      .*?      # match any number of characters, lazily 
    )          # close non-capture group
    (?=,|\z)   # match a comma or the end of the string in a positive lookahead
    /x         # free-spacing regex definition mode

str.scan r
  #=> ["65101km", "Sedan", "Manual", "18131A", "FWD", "Used", "5.5L/100km", "Toyota",
  #    "camry", "SE", "{AC,Heated Seats, Heated Mirrors, Keyless Entry}", "2010"]

接下来有两个注释。 我将用一个简单的字符串来说明这些。

str = "65101km,Sedan,{AC,Heated Seats},2010"

1. {.*?}必须在.*?之前.*? (?:{.*?}|.*?)

如果

r = /(?<=\A|,)(?:.*?|{.*?})(?=,|\z)/

然后

str.scan r
  #=> ["65101km", "Sedan", "{AC", "Heated Seats}", "2010"]

2.匹配项.*必须是惰性的 (又名非贪婪的

如果

r = /(?<=\A|,)(?:{.*?}|.*)(?=,|\z)/

然后

str.scan r
  #=> ["65101km,Sedan,{AC,Heated Seats},2010"]

如果

r = /(?<=\A|,)(?:{.*}|.*?)(?=,|\z)/

然后

"65101km,Sedan,{AC,Heated Seats},2010,{starter motor, pneumatic tires}".scan r
  #=> ["65101km", "Sedan", "{AC,Heated Seats},2010,{starter motor, pneumatic tires}"]

您可以使用

s.scan(/(?:{[^{}]*}|[^,])+/)

参见RubularRegex.101演示。

图案细节

  • (?: -非捕获组的开始:
    • {[^{}]*} - { ,除{}之外的0个或更多字符,然后是}
  • | - 要么
    • [^,] -除之外的任何1个字符,
  • )+ -重复1次或更多次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM