繁体   English   中英

如何在Ruby中获取字符串匹配regexp的特定部分?

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

我有一个Unnecessary:12357927251data的字符串Unnecessary:12357927251data ,我需要选择冒号和数字后的所有数据。 我会用Regexp来做。

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

这将给我:12357927251data ,但我可以只选择所需的信息.+data )?

正则表达式中括号中的任何内容都将被捕获为一个组,您可以在$1$2等中访问,或者在匹配对象上使用[]

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

如果将扫描与捕获组一起使用,则将获得组的数组数组:

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

在正则表达式中使用括号,结果将分解为数组。 例如:

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

试试这个:/(?<= /(?<=\\:)\\d+.+$/

它将冒号更改为正向后视,以便它不会出现在输出中。 请注意,仅冒号是元字符,因此必须使用反斜杠进行转义。

假设您正在尝试从字符串中获取字符串'data',那么您可以使用:

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

String #matre返回MatchData对象。 然后,您可以索引到该MatchData对象以查找所需字符串的一部分。

(MatchData的第一个元素是原始字符串,第二个元素是括号捕获的字符串的一部分)

使用IRB

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM