我有一根绳子:
“N8383”
我想对角色进行分割并保持它以获得:

["N", "8383"]

我尝试了以下方法:
"N8383".split(/[A-Z]/)

这给了我:
["", "8383"]

我想匹配更多的示例字符串,例如:
N344 344N S555 555S

最佳答案

String#split不适合此问题,因为其他人已经说明了原因。我会这样做,使用String#scan代替:

str_parts = "N8383".scan(/[[:alpha:]]+/)
num_parts = "N8383".scan(/[[:digit:]]+/)

如果字符串包含多个字符串部分和/或多个数字部分,这将为您提供一些可使用的内容。
这个表达式:
%w[N344 344N S555 555S].map do |str|
  next str.scan(/[[:alpha:]]+/), str.scan(/[[:digit:]]+/)
end

将返回:
[
  [["N"], ["344"]],
  [["N"], ["344"]],
  [["S"], ["555"]],
  [["S"], ["555"]]
]

虽然你要扫描每一个字符串两次,但我认为这是一个比1更好的解决方案试图找到一个复杂的regex,它可以按正确的顺序返回部件,或者2。重新处理结果以使零件处于正确的顺序尤其是如果字符串与您提供的示例中的字符串一样短也就是说,如果扫描每个字符串两次真的让你恼火,这里有另一种方法:
str_parts, num_parts = str.scan(/([[:alpha:]]+)|([[:digit:]]+)/).transpose.each(&:compact!)

关于ruby - 如何 split 角色并保持值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50454558/

10-09 01:05