Jea*_*ean 804
使用scan
应该做的诀窍:
string.scan(/regex/)
Run Code Online (Sandbox Code Playgroud)
sud*_*ang 64
要查找所有匹配的字符串,请使用类的scan
方法String
.
str = "A 54mpl3 string w1th 7 numb3rs scatter36 ar0und"
str.scan(/\d+/)
#=> ["54", "3", "1", "7", "3", "36", "0"]
Run Code Online (Sandbox Code Playgroud)
如果您更希望MatchData
哪个类是返回的对象的类型,类的match
方法Regexp
,请使用以下内容
str.to_enum(:scan, /\d+/).map { Regexp.last_match }
#=> [#<MatchData "54">, #<MatchData "3">, #<MatchData "1">, #<MatchData "7">, #<MatchData "3">, #<MatchData "36">, #<MatchData "0">]
Run Code Online (Sandbox Code Playgroud)
拥有的好处MatchData
是你可以使用像这样的方法offset
match_datas = str.to_enum(:scan, /\d+/).map { Regexp.last_match }
match_datas[0].offset(0)
#=> [2, 4]
match_datas[1].offset(0)
#=> [7, 8]
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多信息,请参阅这些问题
如何获取字符串中出现的所有Ruby正则表达式的匹配数据?
具有命名捕获支持的Ruby正则表达式匹配枚举器
如何找出ruby中每个匹配的起点
阅读有关特殊变量$&
,$'
,$1
,$2
在红宝石将是超级有用.
MVP*_*MVP 12
如果你有一个组的正则表达式:
str="A 54mpl3 string w1th 7 numbers scatter3r ar0und"
re=/(\d+)[m-t]/
Run Code Online (Sandbox Code Playgroud)
您可以使用scan of string方法查找匹配的组:
str.scan re
#> [["54"], ["1"], ["3"]]
Run Code Online (Sandbox Code Playgroud)
要找到匹配的模式:
str.to_enum(:scan,re).map {$&}
#> ["54m", "1t", "3r"]
Run Code Online (Sandbox Code Playgroud)
您可以使用string.scan(your_regex).flatten
。如果您的正则表达式包含组,它将以单个普通数组返回。
string = "A 54mpl3 string w1th 7 numbers scatter3r ar0und"
your_regex = /(\d+)[m-t]/
string.scan(your_regex).flatten
=> ["54", "1", "3"]
Run Code Online (Sandbox Code Playgroud)
正则表达式也可以是命名组。
string = 'group_photo.jpg'
regex = /\A(?<name>.*)\.(?<ext>.*)\z/
string.scan(regex).flatten
Run Code Online (Sandbox Code Playgroud)
您也可以使用gsub
,如果您想要 MatchData,这只是另一种方式。
str.gsub(/\d/).map{ Regexp.last_match }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
181520 次 |
最近记录: |