/
( # begin capture group 1
\w+ # match >= 1 word characters
) # end capture group 1
: # match a colon
[ ] # match a space
( # begin capture group 2
(?: # begin non-capture group
\d+ # match >= 1 digits
m,[ ]* # match "m," followed by >= 0 spaces
) # end non-capture group
* # execute preceding non-capture group >= 0 times
\d+ # match >= 1 digits
) # end capture group 2
/x # invoke free-spacing regex definition mode
4条答案
按热度按时间iq0todco1#
当输入总是遵循相同的模式时,我将使用带有Regexp的
String#scan
来提取有效值。这些嵌套的数组值可以转换为如下的哈希值:
因为你希望数组中的数字是整数:
lfapxunr2#
您可以编写以下代码
输入
代码
用冒号拆分代码:并替换末尾的m
产出
yuvru6vn3#
下面允许任意数量的比赛,每个比赛可以有任意数量的相关距离(下面的
str
中有四个)。它使用了一种很少使用的String #gsub的一种(并且被大大低估了)形式,它只接受一个参数,但不接受块,并返回一个枚举数。枚举数只生成
gsub
参数的匹配项,因此与字符串替换无关。当scan
'的参数是包含一个或多个捕获组的正则表达式。作为
gsub
参数的正则表达式可以用 * free-spacing * 模式表示,以使其自文档化。注意,在自由空格模式下,表达式中的空格必须被保护起来,有很多方法可以做到这一点,我把每个空格放在一个字符类(
[ ]
)中。在上面的例子中,我们计算下面的枚举数。
它将生成的元素如下所示。
还要注意
这种方法的一种变体是
由于正则表达式现在没有捕获组,因此将第一行替换为
roejwanj4#
你能试试下面的代码吗?
p/s:我认为你应该自己做,以提高自己