我有一个字符串Unnecessary:12357927251data
,我需要在冒号和数字后选择所有数据。我会用Regexp来做。
string.scan(/:\d+.+$/)
这会给我:12357927251data
,但我是否只能选择所需信息.+
(data
)?
答案 0 :(得分:20)
正则表达式中括号中的任何内容都将作为一个组捕获,您可以在$1
,$2
等中或在匹配对象上使用[]
来访问该组:
string.match(/:\d+(.+)$/)[1]
如果将扫描与捕获组一起使用,您将获得一组数组:
"Unnecessary:123data\nUnnecessary:5791next".scan(/:\d+(.+)$/)
=> [["data"], ["next"]]
答案 1 :(得分:3)
在正则表达式中使用括号,结果将分解为数组。例如:
x='Unnecessary:12357927251data'
x.scan(/(:\d+)(.+)$/)
=> [[":12357927251", "data"]]
x.scan(/:\d+(.+$)/).flatten
=> ["data"]
答案 2 :(得分:1)
试试这个:/(?<=\:)\d+.+$/
它将冒号更改为正向后视,以便它不会出现在输出中。请注意,仅冒号是元字符,因此必须使用反斜杠进行转义。
答案 3 :(得分:1)
假设您正在尝试从字符串中获取字符串'data',那么您可以使用:
string.match(/.*:\d*(.*)/)[1]
String#match返回MatchData对象。然后,您可以索引到该MatchData对象以查找所需字符串的一部分。
(MatchData的第一个元素是原始字符串,第二个元素是括号捕获的字符串的一部分)
答案 4 :(得分:0)
使用IRB
irb(main):004:0> "Unnecessary:12357927251data".scan(/:\d+(.+)$/)
=> [["data"]]