提问人:jay 提问时间:10/30/2023 最后编辑:Stefanjay 更新时间:11/1/2023 访问量:84
如何在 Ruby 中查找一个字符串中的整数,其中只有前面的字符是已知的,并且最多有 2 位数字
how to find an integer in a string in which only the preceeding character is known, and there is a max of 2 digits, in Ruby
问:
我有一个字符串,例如
x = '4x4 @ 32" hjy w/ R43 potter'
x = '4x4 @ 32" hjy w/ R4 26 potter'
x = 'Restful4 4 @ 32" hjy R8 26 potter'
我需要获取前面的数字,即 从第一个,从第二个,从第三个。R
43
4
8
保证大写字母 R。
我可以使用它,但这对处理所有情况都很痛苦。index('R')
我尝试了匹配,但似乎不起作用。有什么想法吗?
我试过这个:
sFind = x.match /(?<name>R \d+) /
debug=debug+sFind[:name].to_s + "\n"
调试出现错误
答:
1赞
Rajagopalan
10/30/2023
#1
使用扫描方式
x = "4x4 @ 32 hjy w/ R43 potter"
matches = x.scan(/R(\d{1,2})/)
puts matches.flatten.first
如果有多个 R 后跟这样的数字,则删除.first
x = "4x4 @ 32 hjy w/ R43 potter R4 26 potter"
matches = x.scan(/R(\d{1,2})/)
p matches.flatten
输出
"43"
["43", "4"]
3赞
Stefan
10/30/2023
#2
你快到了,只需删除 和 之间的空格:R
\d+
x = '4x4 @ 32" hjy w/ R43 potter'
x.match /(?<name>R \d+) / #=> nil
x.match /(?<name>R\d+) / #=> #<MatchData "R43 " name:"R43">
还有 String#[]
可以立即提取捕获组:
x[/(?<name>R\d+) /, :name] #=> "R43"
要仅获取数字:
x[/R(?<name>\d+) /, :name] #=> "43"
或者通过不使用命名捕获来缩短时间:
x[/R(\d+)/, 1] #=> "43"
您还可以使用所谓的正 lookbehind 断言来匹配前面的数字,但不包括:R
R
x[/(?<=R)\d+/] #=> "43"
评论
0赞
Rajagopalan
10/30/2023
WILL 做什么?<name>
1赞
Stefan
10/30/2023
@Rajagopalan它是一个命名的捕获组。
0赞
jay
10/31/2023
不过,我不希望返回 R,只希望返回 4 或 43
0赞
Stefan
10/31/2023
@jay 如果您不想捕获,请将其移出捕获组,例如R
/R(?<name>\d+) /
评论
"
@ 32