2012-12-11 24 views
1

我有,我想提取某一部分的字符串:正则表达式在Ruby中不工作

原始字符串:/abc/d7_t/g-12/jkl/m-n3/pqr/stu/vwx

结果期望:/abc/d7_t/g-12/jkl/

字符数可以在改变整个字符串。它有字母,数字,下划线和连字符。我想基本上切割后的第五个字符串“/”

我试了几个正则表达式,但它似乎有一些错误的格式。

+6

http://rubular.com是你的朋友 – apneadiving

+4

你尝试过什么? – Faiz

+0

那么你想应用什么规则?总是在'pqr'之前切割?或者在'/'的第六个实例之后?还是第16个角色?或第四位数字?什么?澄清这一点,你会在一半... –

回答

3

如果非正则表达式的方法是可以接受的,这个怎么样:

s.split('/').take(n).join('/')+'/' 

哪里s如果你的字符串(在你的情况下:/abc/d7_t/g-12/jkl/m-n3/pqr/stu/vwx)。

def cut_after(s, n) 
    s.split('/').take(n).join('/')+'/' 
end 

然后

cut_after("/abc/d7_t/g-12/jkl/m-n3/pqr/stu/vwx", 5) 

应该工作。不像正则表达式一样紧凑,但有些人可能会发现它更清晰。

+0

我更喜欢这.....我讨厌正则表达式 –

+1

这很好*如果你讨厌正则表达式 - 明确表示*非正则表达式解决方案也是可以接受的(包括我自己在内的人会喜欢找到正则表达式修复解决方案的目标是在正则表达式中进行;-)) – Faiz

1

匹配除了 '/' 4倍字符的任意序列: -

(\/[^\/]+){4}\/ 
2

该正则表达式将是:%r(/(?:[^/]+/){4})。请注意,在这种情况下使用%r文字版本来避免转义斜线是一个好主意。未转义的斜杠可能是您格式错误的原因。

+0

请注意我的评论。这是他想要的第6次斜线(他忘记包括第一次)。 –

+0

看起来像5斜杠给我。我只是加倍计数。另外,在我发布之前,我在IRB中检查了我的结果与他期望的结果。 –

+0

哇,我的不好,我必须在我测试过的原始正则表达式中出现错误。 -.- –