Ruby 使用gsub或sub替换一个字符

Ruby 使用gsub或sub替换一个字符,ruby,regex,string,gsub,Ruby,Regex,String,Gsub,我只想将字符串的第三个字符替换为它的大写对应字符。使用gsub或sub会导致以下错误: "Hiiiii".sub!(string[2,1],string[2,1].upcase!) # => hIiiii "Hello".gsub!(string[2,1],string[2,1].upcase!) # => heLLo 当gsub意外地替换了所有相似的字符时,sub替换了第一个出现的字符,而与我提到的位置无关 有人能建议我如何使sub仅在第三个字符之后工作吗?使用以下简单方法访问

我只想将字符串的第三个字符替换为它的大写对应字符。使用
gsub
sub
会导致以下错误:

"Hiiiii".sub!(string[2,1],string[2,1].upcase!) # => hIiiii

"Hello".gsub!(string[2,1],string[2,1].upcase!) # => heLLo
gsub
意外地替换了所有相似的字符时,
sub
替换了第一个出现的字符,而与我提到的位置无关


有人能建议我如何使
sub
仅在第三个字符之后工作吗?

使用以下简单方法访问特定字符并替换任何特定字符

str = "Hiiiii"
str[2] = str[2].upcase
str # => "HiIiii"

使用以下简单方法访问特定字符并替换任何特定字符

str = "Hiiiii"
str[2] = str[2].upcase
str # => "HiIiii"

您可以使用带有正向后视的正则表达式来执行此操作。Lookarounds不使用字符串中的字符,而只声明匹配是否可能

"Hiiiii".sub(/(?<=..)./, &:upcase)
 # => "HiIiii"
“Hiiiii”.sub(/(?“Hiiiii”)
说明

(?<=       # look behind to see if there is:
  .        #  any character except \n
  .        #  any character except \n
)          # end of look-behind
.          # any character except \n

(?您可以使用带有正向查找的正则表达式来执行此操作。查找功能不使用字符串中的字符,而只声明匹配是否可能

"Hiiiii".sub(/(?<=..)./, &:upcase)
 # => "HiIiii"
“Hiiiii”.sub(/(?“Hiiiii”)
说明

(?<=       # look behind to see if there is:
  .        #  any character except \n
  .        #  any character except \n
)          # end of look-behind
.          # any character except \n

(?当您想要传递某个模式时,其长度可以在正则表达式匹配之前确定,您可以使用正向查找来传递该模式

最好使用
sub!
,因为它只应用一次(而不是像编辑前hwnd的答案那样使用
gsub!
和锚定
\A

“Hiiiii”.sub!(/(?“Hiiiii”)
“你好”。sub!(/(?“你好”

当您想要传递某个模式,该模式的长度可以在正则表达式匹配之前确定,您可以使用正向查找来传递该模式

最好使用
sub!
,因为它只应用一次(而不是像编辑前hwnd的答案那样使用
gsub!
和锚定
\A

“Hiiiii”.sub!(/(?“Hiiiii”)
“你好”。sub!(/(?“你好”

Thank u.。如果我不应该使用这些内部方法,我该怎么做?意思是说,当我不应该使用(字符串类的)内部方法时。是赋值:)还有卡纳塔克邦。@akshatha Ohh!!同一个城市…我们是..太好了!谢谢你..如果我不应该使用这些内部方法,我该怎么做?意思是,当我不应该使用内部方法(字符串类)时。是一个赋值:)还有它的卡纳塔克邦..@akshatha Ohh!!同一个城市…我们是..太棒了!如果您只想修改字符串的一部分,如字符偏移量所指定的,通常更容易分解字符串,进行更改,然后重新构建;例如,
s=“Howyadoin?”;s=s[0,3]+s[3,2]。upcase+s[5..-1]=>“Howyadoin?”
。很好。谢谢。如果您只想修改字符串的一部分(由字符偏移量指定),通常更容易将字符串拆分,进行更改,然后重新构建;例如,
s=“Howyadoin?”;s=s[0,3]+s[3,2]。upcase+s[5..-1]=>“Howyadoin?”
。很好。谢谢。。