ruby - 如何拆分角色并保持值(value)

标签 ruby string

我有一个字符串:

“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. 尝试提出一个复杂的正则表达式来回溯以正确的顺序返回部分,或 2. 重新处理结果以将部分放入正确的顺序。特别是如果字符串与您提供的示例中的字符串一样短。话虽这么说,如果扫描每个字符串两次真的让您感到恼火,这里有另一种方法:

str_parts, num_parts = str.scan(/([[:alpha:]]+)|([[:digit:]]+)/).transpose.each(&:compact!)

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

相关文章:

ruby-on-rails - 在 docker compose 上运行时无法连接到 Rails 应用程序中的数据库

r - 包含字符串和数字的聚合数据框

java - Pattern.compile.split 与 StringBuilder 迭代和子字符串

java - 可以将具有单个重复字符的Java字符串初始化为特定长度吗

Python - 从文件中的行中删除时间戳和用户名

c++ - 在 C++ 中声明常量时使用字符串值作为宽字符串

ruby - 是否有接受上传文件、执行某些操作并让用户下载结果的网站模板?

ruby - package.json (javascript npm) 或 requirements.txt (python pip) 等同于 ruby

ruby - 每当 Gem 在 Ruby 1.9.3 上出现错误时 - 没有这样的文件要加载

ruby-on-rails - 在 Rails 中创建静态页面的最佳方式是什么?