开发者

How to get the particular part of string matching regexp in Ruby?

I've got a string Unnecessary:12357927251data and I need to select all data after colon and numbers. I will do it using Regexp.

string.scan(/:\d+.+$/)

This will give me :12357927251data, but can I select only needed information开发者_开发技巧 .+ (data)?


Anything in parentheses in a regexp will be captured as a group, which you can access in $1, $2, etc. or by using [] on a match object:

string.match(/:\d+(.+)$/)[1]

If you use scan with capturing groups, you will get an array of arrays of the groups:

"Unnecessary:123data\nUnnecessary:5791next".scan(/:\d+(.+)$/)
=> [["data"], ["next"]]


Use parenthesis in your regular expression and the result will be broken out into an array. For example:

x='Unnecessary:12357927251data'
x.scan(/(:\d+)(.+)$/)
=> [[":12357927251", "data"]]
x.scan(/:\d+(.+$)/).flatten
=> ["data"]


Assuming that you are trying to get the string 'data' from your string, then you can use:

string.match(/.*:\d*(.*)/)[1]

String#match returns a MatchData object. You can then index into that MatchData object to find the part of the string that you want.

(The first element of MatchData is the original string, the second element is the part of the string captured by the parentheses)


Try this: /(?<=\:)\d+.+$/

It changes the colon to a positive look-behind so that it does not appear in the output. Note that the colon alone is a metacharacter and so must be escaped with a backslash.


Using IRB

irb(main):004:0> "Unnecessary:12357927251data".scan(/:\d+(.+)$/)
=> [["data"]]
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜