我有一个字符串:
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/