用中间有空格的常规字符和特殊字符替换字符串

Replace strings with both regular and special characters with whitespace in between

我正在寻找如何处理包含中间有空格的常规字符和特殊字符的字符串。

文字='You got a Check +'

lookup_term = check +

replace_with_term = 'check+'

我正在寻找的最终产品是 you got a check+

我目前正在使用 text.downcase.gsub(/\blookup_term\b/, replace_with_term) 来处理带有常规字符的 lookup_term,但我似乎无法弄清楚如何处理正则表达式 + 空格 + 特殊字符的组合。

您可以使用

text.downcase.gsub(/(?<!\w)#{Regexp.escape(lookup_term)}(?!\w)/, replace_with_term)

如果你真的不想让字符串变成小写,只是想不区分大小写匹配,使用/i修饰符并删除.downcase:

text.gsub(/(?<!\w)#{Regexp.escape(lookup_term)}(?!\w)/i, replace_with_term)

参见Ruby demo online

生成的正则表达式类似于 /(?<!\w)check\ \+(?!\w)/,参见 Rubular demo

请注意,\b 的含义取决于上下文,and matches 一个空的 space(一个位置)

  1. 在字符串的第一个字符之前,如果第一个字符是单词字符。
  2. 在字符串的最后一个字符之后,如果最后一个字符是单词字符。
  3. 字符串中两个字符之间,其中一个是单词字符,另一个不是单词字符。

(?<!\w)check\ \+(?!\w)模式包含明确的单词边界,它们总是以相同的方式匹配:

  • (?<!\w) - 左侧单词边界,需要字符串位置的开头或紧邻当前位置左侧的任何非单词字符
  • check\ \+ - check、space 和 +
  • (?!\w) - 右侧单词边界,需要字符串结束位置或任何非单词字符紧靠当前位置的右侧。