尝试使用正则表达式将复数词转换为单数词但想忽略几个词

Trying to convert plural words to singular words using regex but want to ignore a few words

我目前正在尝试替换一些复数词,例如从“birds”中删除“s”并在 bigquery 中将其替换为“bird”

但我希望他们忽略一些词,例如“less”、“james”、“this”。

我想出了这个忽略“少”但仍然屠夫詹姆斯的方法。

    SELECT REGEXP_REPLACE("James likes to chase birds","([^s])s\b", "\1" )

我得到的输出是“Jame like to chase bird”,但我期望的是“James like to chase bird”

更新: 我尝试使用否定前瞻,但不幸的是,Bigquery Regex(RE2) 不支持此功能。

您可以在此处使用一个替代项,即具有两个替代项的正则表达式。在第一个备选方案中,您可以将所有异常词捕获到第 1 组中,在第二个备选方案中,使用您的正则表达式。替换将连接两个组值:

(?i)\b(less|james|this)\b|([^s])s\b

替换为</code>。参见<a href="https://regex101.com/r/3rXclD/1" rel="nofollow noreferrer">regex demo</a>。 <em>详情</em>:</p> <ul> <li><code>(?i) - 不区分大小写的修饰符

  • \b(less|james|this)\b - 第 1 组:lessjamesthis 作为一个完整的词
  • | - 或
  • ([^s]) - 第 1 组:s 以外的任何字符(注意:如果您只想匹配 [=20= 以外的字母], 你可以使用 [^\W\d_s])
  • s\b - s 在一个词的结尾。
  • 在您的代码中,使用

    SELECT REGEXP_REPLACE("James likes to chase birds", r"(?i)\b(less|james|this)\b|([^s])s\b", r"" )