如果找到下一个字母,Ruby替换字符串

时间:2017-12-04 14:11:19

标签: ruby regex string

我只想在模式之后的下一个字母是给定的一个字母时替换Ruby中的模式。

示例:将“αυ”替换为“av”仅在“αυ”之后的下一个字母为以下之一时:α|γ|δ|λ|μ|ν|ρ|σμ|ω

这段代码当然不会起作用,我想我需要使用正则表达式更复杂来匹配模式之后的一个字母。

string.gsub!("αυ", "av") if string =~ /α|γ|δ|λ|μ|ν|ρ|σμ|ω/

感谢您的任何建议。

1 个答案:

答案 0 :(得分:8)

使用积极的前瞻:

string.gsub!(/αυ(?=α|γ|δ|λ|μ|ν|ρ|σμ|ω)/, "av")

请参阅Rubular demo

<强>详情

  • αυ - αυ子字符串
  • (?=α|γ|δ|λ|μ|ν|ρ|σμ|ω) - 一个积极的前瞻,需要在其中包含一个替代品,同时在匹配值中排除替代品,即它将保留在结果字符串中。)

您也可以将单字母替换“收缩”为字符类

/αυ(?=[αγδλμνρω]|σμ)/
      ^^^^^^^^^^

another Rubular demoσμ不能放在字符类中,因为它包含2个字符。