Ruby 正则匹配的小问题,涉及到中文 不会匹配了

tiseheaini · 2012年04月27日 · 最后由 zw963 回复于 2012年04月28日 · 3108 次阅读

等级 经验
01-02 级 100
02-03 级 200
03-04 级 300
04-05 级 400
05-06 级 600 06-07 级 900
07-08 级 1200
08-09 级 1700
09-10 级 2500
10-11 级 6000
11-12 级 8000
12-13 级 10000

这是我想匹配的文本

我要做的工作是将文本匹配,将匹配到的文本放入一个 Hash。可是我匹配不好这段文本。 我的匹配代码 file = File.new("D:\jingyan.txt") hash = Hash.new regexp = /(\d+)\s+(\d+)/ file.each do |line| line =~ regexp hash["#{$1}"] = "#{$2}" end 输出的 Hash 总是不正常。

/(\d{2}-\d{2}级)\s+(\d+)/ 我觉得等级超过 99 的按照这个经验值,不用金手指之类的很难达到了。。。 D&D 的等级 10 级都是灰常 nb 了

/(.+?)\s+(\d+)/

or

split(' ')

#1 楼 @ywjno 昨晚没睡好这么个小问题都解决不了了

#2 楼 @anylei 昨晚没睡好这么个小问题都解决不了了

(\d+)[^\d\r\n]+(\d+)[^\d\r\n]+(\d+)

三个括号,分别捕获每行的三个数字:起始等级、终止等级、经验 分割这三个数字的特征量为非数字、换行的非空串:[^\d\r\n]+

建议先捕获出所有所需数据,再进行数据处理。

#5 楼 @kfll 在正则匹配中 /(ab)((cde)fg)/ 的正则式中 $1 == ab, $2 == ?, $3 == ?

#6 楼 @tiseheaini

>> $2
=> "cdefg"
>> $3
=> "cde"


楼主是要匹配 hash['12-13 级'] = 10000 的形式么?

拜托~~ 问问题前,先写清楚要问的问题。 你要匹配的 patten 是什么? Ruby 的 RE 匹配可以用最强来形容,甚至比 Perl 还牛逼。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号