当前位置: 首页 > 知识库问答 >
问题:

Ruby解析和regex

吴同
2023-03-14

最近拿起Ruby,一直在摆弄它。我想学习如何使用regex或其他Ruby技巧来检查给定文本行中的某些单词、空格字符、有效格式等。

假设我有一个严格如下格式的订单列表:

cost: 50 items: book,lamp

分号后面有一个空格,每个逗号后面没有空格,结尾没有尾随空格等等。如何使用Ruby检查此格式中的错误?例如,我的检查应该失败:

cost:     60 items:shoes,football   

我的目标是将字符串拆分为“”并检查第一个单词是否为“cost:”,第二个单词是否为数字等等,但我意识到拆分为“”并不能帮助我检查额外的空格,因为它只会吃掉它。也不能帮助我检查尾随空格。我该怎么做呢?

共有1个答案

上官季
2023-03-14

可以使用以下正则表达式

r = /
    \A                # match beginning of string     
    cost:\s           # match "cost:" followed by a space
    \d+\s             # match > 0 digits followed by a space
    items:\s          # match "items:" followed by a space
    [[:alpha:]]+      # match > 0 lowercase or uppercase letters
    (?:,[[:alpha:]]+) # match a comma followed by > 0 lowercase or uppercase 
                      # letters in a non-capture group (?: ... )
    *                 # perform the match on non-capture group >= 0 times
    \z                # match the end of the string
    /x                # free-spacing regex definition mode

"cost: 50 items: book,lamp"         =~ r #=> 0   (a match, beginning at index 0)
"cost: 50 items: book,lamp,table"   =~ r #=> 0   (a match, beginning at index 0)
"cost:     60 items:shoes,football" =~ r #=> nil (no match)

正则表达式当然可以用正常的方式编写:

r = /\Acost:\s\d+\sitems:\s[[:alpha:]]+(?:,[[:alpha:]]+)*\z/

r = /\Acost: \d+ items: [[:alpha:]]+(?:,[[:alpha:]]+)*\z/

虽然空格字符(\s)不能被自由行间距模式定义(\x)中的空格替换。

 类似资料:
  • 所以我使用gem文件从reddit的首页拉链接。gem函数返回一个哈希,其中包含首页上的所有链接及其所有信息(评论、业力、作者、日期、链接、上升、下降等的#)。下面是包含我首页上第一个链接信息的哈希请求: {"modhash"= 结尾<code>,</code>分隔下一个链接,如下所示: {“种类”= 我基本上需要某种方法来解析这个散列的每个条目,这样我就可以将所有相关的东西存储到一个数组中。实际

  • 问题内容: 我正在尝试从reddit的API迭代解析的JSON响应。 我已经进行了一些谷歌搜索,似乎其他人也遇到了这个问题,但是似乎没有一种解决方案适合我。Ruby将[‘data] [‘children]视为索引,这会导致错误,但是我只是想从JSON中获取这些值。有什么建议吗? 我的代码: 我在终端中收到的错误消息: 问题答案: 您正在尝试遍历,这是一个哈希,而不是一个列表。您需要通过以下方式从J

  • 问题内容: 我有一个要在Ruby中解析的字符串: 有没有一种简单的方法可以提取数据? 问题答案: 看起来像JavaScript Object Notation(JSON) 。您可以解析驻留在某个变量(例如)中的JSON ,如下所示: 如果您使用的是较旧的Ruby,则可能需要安装json gem。 还有其他针对JSON的JSON实现,可能更适合某些用例: Ruby的YAJL C绑定 JSON ::流

  • 本文向大家介绍详细解析Ruby中的变量,包括了详细解析Ruby中的变量的使用技巧和注意事项,需要的朋友参考一下  变量持有要使用的程序的数据的存储位置。 Ruby支持的有五种类型的变量。在前面的章节中已经经历了一个简短描述以及这些变量。本章中介绍的这五种类型的变量。 Ruby的全局变量: 全局变量以$开头。未初始化的全局变量的值是零,并使用-w选项产生警告。 全局变量的赋值会改变全局状态。这是不推

  • 我得到了一个文件来表示图中节点的邻接表,作为我需要解析的文本文件。第一行是节点总数。第二行是node1,以及它所连接的节点列表(无向图)。例如 第1行:该图总共有7个节点。< br >线路2:节点1连接到节点2、节点3。< br >线路3:节点2连接到节点1、节点3、节点4、节点5和节点7。 -1有点没用。 这是我当前的ruby实现。我正试图找到一种方法来设置它 我的节点类有一个邻接节点数组,我可

  • 译者注:因原来的发布不带图片,所以本章图片选自 http://www.ruby.no/prosjekt/ProgrammeringIRuby/ext_tk.html,不是英语,可能看不清,不过界面都显示出来了。 Ruby Application Archive (简称RAA)包括几个支持你使用Ruby来创建GUI(Graphical User Interface)程序的扩展(extensions