首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从字符串数组中提取数字?(我正在使用regex)

如何从字符串数组中提取数字?(我正在使用regex)
EN

Stack Overflow用户
提问于 2017-06-28 16:26:03
回答 2查看 126关注 0票数 1

我有一个字符串数组

代码语言:javascript
复制
test= ["ChangeServer<br/>Test: 3-7<br/>PinCode:DFSFSDFB04008<br/>ShipCode:DFADFSDFSDM-000D3<br/>SomeCode:sdfsdf", "werwerwe", "adfsdfsd", 
"sdfsdfsdfsd<br/>Test: 9<br/>PinCode:ADFSDF4NS0<br/>ShipCode:FADFSDFD-9ZM170<br/>"]

我想在Test:之后获取数字,在上面的字符串数组中是34567 (范围3-7)和9

期望输出:

代码语言:javascript
复制
["3","4","5","6","7","9"]

到目前为止我尝试过的

代码语言:javascript
复制
test.join.scan(/(?<=Test: )[0-9]+/)
=> ["3", "7"]

如何处理范围?

第二个测试用例:

代码语言:javascript
复制
    test= ["ChangeServer<br/>Test: 3-7<br/>PinCode:DFSFSDFB04008<br/>ShipCode:DFADFSDFSDM-000D3<br/>SomeCode:sdfsdf", "werwerwe", "adfsdfsd", 
"sdfsdfsdfsd<br/>Test: 9<br/>PinCode:ADFSDF4NS0<br/>ShipCode:FADFSDFD-9ZM170<br/>", "sdfsdfsdfsd<br/>Test: 15-18<br/>PinCode:ADFSDF4NS0<br/>ShipCode:FADFSDFD-9ZM170<br/>"]

期望产出:

代码语言:javascript
复制
["3","4","5","6","7","9","15","16","17","18"]
EN

回答 2

Stack Overflow用户

发布于 2017-06-28 17:22:27

有很多方法可以解决这个问题。我可能会这样做:

代码语言:javascript
复制
test.flat_map do |s|
  _, m, n = *s.match(/Test:\s*(\d+)(?:-(\d+))?/)
  m ? (m..n||m).to_a : []
end

在repl.it:https://repl.it/JFwT/13上看到它的作用

或者,更简洁地说:

代码语言:javascript
复制
test.flat_map {|s| s.match(/Test:\s*(\d+)(?:-(\d+))?/) { $1..($2||$1) }.to_a }

https://repl.it/JFwT/11

票数 5
EN

Stack Overflow用户

发布于 2017-06-28 18:03:43

只是出于好奇:

代码语言:javascript
复制
test.
  join.
  scan(/(?<=Test: )[\d-]+/).
  map { |e| e.gsub(/\A\d+\Z/) { |m| "#{m}..#{m}" }.gsub('-', '..') }.
  map(&method(:eval)).
  flat_map(&:to_a)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44807972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档