Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将单词替换为大写的单词_Ruby_Regex_Gsub - Fatal编程技术网

Ruby 将单词替换为大写的单词

Ruby 将单词替换为大写的单词,ruby,regex,gsub,Ruby,Regex,Gsub,如果行的第一个单词(一个或多个)都是大写的,我想用大写的单词替换这些单词(使用ruby的.capitalize)。例如“FOO BAR”到“FOO BAR” 我尝试了以下方法: line.gsub!(/^([A-Z ]+)/, '\1'.capitalize) 及 这两个都不起作用。有办法做到这一点吗?试试: line.gsub!(/^([A-Z ]+)/) { |w| w.capitalize } 在IRB中: require 'active_support' 'FOO bar'.gsub

如果行的第一个单词(一个或多个)都是大写的,我想用大写的单词替换这些单词(使用ruby的
.capitalize
)。例如“FOO BAR”到“FOO BAR”

我尝试了以下方法:

line.gsub!(/^([A-Z ]+)/, '\1'.capitalize)

这两个都不起作用。有办法做到这一点吗?

试试:

line.gsub!(/^([A-Z ]+)/) { |w| w.capitalize }
在IRB中:

require 'active_support'
'FOO bar'.gsub(/^[A-Z]+/) { |w| w.capitalize }
 => "Foo bar" 
或OP的版本:

'FOO bar'.gsub!(/^([A-Z ]+)/) { |w| w.capitalize }
 => "Foo bar" 
对于前两个词,这既快又脏:

'FOO BAR'.gsub!(/^([A-Z ]+ [A-Z]+)/) { |w| w.capitalize }
 => "Foo bar" 
您可以通过以下方式变得更漂亮:

'FOO BAR'.gsub!(/^((?<word>[A-Z]+) \g<word>)/) { |w| w.capitalize }
 => "Foo bar" 
尝试:

在IRB中:

require 'active_support'
'FOO bar'.gsub(/^[A-Z]+/) { |w| w.capitalize }
 => "Foo bar" 
或OP的版本:

'FOO bar'.gsub!(/^([A-Z ]+)/) { |w| w.capitalize }
 => "Foo bar" 
对于前两个词,这既快又脏:

'FOO BAR'.gsub!(/^([A-Z ]+ [A-Z]+)/) { |w| w.capitalize }
 => "Foo bar" 
您可以通过以下方式变得更漂亮:

'FOO BAR'.gsub!(/^((?<word>[A-Z]+) \g<word>)/) { |w| w.capitalize }
 => "Foo bar" 

我不是Ruby程序员,但我可以看到您正在对字符串
\1
调用
capitalize
,当然这又是
\1
。您需要寻找类似于PHP的东西,它允许您通过函数运行正则表达式匹配-在本例中,
大写

我不是Ruby程序员,但我可以看到您正在调用字符串
大写
\1
,当然这又是
\1
。您需要寻找类似于PHP的东西,它允许您通过一个函数运行正则表达式匹配-在本例中,
大写

您希望将行中的所有单词大写,对吗? 请尝试字符串#扫描:

line.scan(/\w+|\W+/).map(&:capitalize).join

你想把所有的单词都大写,对吗? 请尝试字符串#扫描:

line.scan(/\w+|\W+/).map(&:capitalize).join

这是可行的,但只适用于第一个全大写单词。您知道如何使其适用于前两个单词都是大写的情况吗?只需在[]中添加空格字符即可。他在他的例子中忘记了(?)它。我也尝试了空格,但对于第二个全大写的单词仍然不起作用。也许我在问题中的例子让它更清楚。对不起,谢谢!请注意,有了所有这些功能,您可以更简洁地执行:
my_str.gsub(/…/,&:capitalize)
此功能有效,但仅适用于第一个全大写单词。您知道如何使其适用于前两个单词都是大写的情况吗?只需在[]中添加空格字符即可。他在他的例子中忘记了(?)它。我也尝试了空格,但对于第二个全大写的单词仍然不起作用。也许我在问题中的例子让它更清楚。对不起,谢谢!请注意,使用所有这些,您可以更简洁地执行:
my_str.gsub(/…/,&:capitalize)