从长字符串中提取值

rak*_*rak 0 ruby string

我很难从iOS应用程序发送的字符串中提取ID和Answer值.在以下示例中,我有四个ID和四个需要提取的答案.

s = "ID:1_Answer1_ID:2_Answer2_ID:3_AnswerRandom_ID:789_Answer3.5"

IDs_array = [1,2,3,789]
Answers_array = [Answer1,Answer2,AnswerRandom,Answer3.5]
Run Code Online (Sandbox Code Playgroud)

感谢任何帮助或建议.

ndn*_*kov 5

ids, answers = s.scan(/ID:(\d+)_([^_]+)/).transpose
Run Code Online (Sandbox Code Playgroud)

正则表达式的想法是:

  1. ID之前是ID: -ID:
  2. 实际的ID是数字 -(\d+)
  3. 他们用下划线与答案分开-_
  4. 回答本身的非下划线字符序列([^_]+)

String#scan使用对数组的返回数组[id, answer],因此我们将它转​​置为两个数组 - 一个带有id,另一个带有答案.然后我们使用多个赋值来解压外部数组.