ruby - 如何删除字符串并将其移动到字符串的后面

标签 ruby regex string match

我有一个字符串:

str = "AB asdfsa"

匹配正则表达式:

/^([A-Z][A-Z][[:space:]])[A-Z]/i

如何把括号中匹配的部分移到字符串的末尾?上面我想要的输出是一个字符串:

"asdfsa AB"

类似地,如果有一个字符串:

"BC ffff eeee"

我想要的结果是:

"ffff eeee BC"

我以为 match? 关键字可以让我提取那部分,但它只返回 true/false:

str.match?(/^([A-Z][A-Z])[[:space:]][A-Z]/i) # => true

最佳答案

我建议使用 sub 的单一正则表达式解决方案:

def swap_parts(s)
    s.sub(/\A([A-Z][A-Z])([[:space:]]+)([A-Z].*)/im, '\3\2\1')
end

swap_parts('AB asdfsa')    # => asdfsa AB
swap_parts('BC ffff eeee') # => ffff eeee BC

参见 Ruby demo

详细信息:

  • \A - 字符串的开始
  • ([A-Z][A-Z])(或 ([A-Z]{2}))-(第 1 组)2 ASCII字母(不区分大小写,因为使用了 i 修饰符)
  • ([[:space:]]+) - (第 2 组) 1 个或多个空格
  • ([A-Z].*) - (Group 3) 一个 ASCII 字母和任何 0+ 字符(因为传递了 m 修饰符, . 现在也匹配换行符。

替换模式以相反的顺序插入捕获的部分:首先使用第 3 组,然后附加第 2 组值,最后插入第 3 组。

关于ruby - 如何删除字符串并将其移动到字符串的后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42634799/

相关文章:

ruby-on-rails - 使用 Rails 编写 RSpec 测试时,spec/requests 文件夹和 spec/controllers 应该放什么?

Ruby - 如何从控制台(stdin)测试 nil 或空字符串

ios - Jenkins iOS faSTLane 构建 : Could not find 'bundler'

ruby-on-rails - Rails 生成奇怪的 mysql 查询

java - 带有单个字母的正则表达式无法识别

python - 从字符串开头删除子字符串

python - python中特殊符号前后插入空格

java - 正则表达式 - 使用匹配组

java - 用正则表达式替换第一个

javascript - 字符串中的 OnClick 索引