【问题标题】:How to assign named groups in a regex to local variables如何将正则表达式中的命名组分配给局部变量
【发布时间】:2015-03-23 21:14:54
【问题描述】:

我正在尝试将我的正则表达式匹配的命名组分配给局部变量。例如,我正在尝试为日期输入捕获字符串,并将命名组 monthday 作为局部变量:

input = "2015-01-24" 
expr = /\d{4}-(?<month>\d{2})-(?<day>\d{2})/ 
input =~ expr #=> 0

但是,monthday 在匹配后是未定义的变量。如何将monthday 作为局部变量访问?

根据Ruby doc,键入组变量名称将返回捕获的值(本例中为“美元”)

/\$(?<dollars>\d+)\.(?<cents>\d+)/ =~ "$3.67" #=> 0 
dollars #=> "3"

我也会很感激任何推荐的资源。

【问题讨论】:

    标签: ruby regex capturing-group


    【解决方案1】:

    仔细阅读您引用的文件:

    当命名捕获组与表达式左侧的文字正则表达式和 =~ 运算符一起使用时,捕获的文本也会分配给具有相应名称的局部变量。

    您的代码:

    input =~ expr
    

    在两个方面没有证实这一点:(1)expr 不是文字正则表达式,而是分配给变量的正则表达式,(2)您在右侧有正则表达式。

    如果您遵循文档,则可以将捕获称为局部变量。

    【讨论】:

    • OP:即/\d{4}-(?&lt;month&gt;\d{2})-(?&lt;day&gt;\d{2})/ =~ "2015-01-24" #=&gt; 0; month #=&gt; "01"; day #=&gt; "24"。这是左边的文字,而不是变量。谢谢,sawa,对局部变量的赋值对我来说是新的。
    猜你喜欢
    • 2011-02-12
    • 2014-07-20
    • 1970-01-01
    • 2010-11-17
    • 2013-01-20
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2015-09-08
    相关资源
    最近更新 更多