Regex 在指定的前缀和后缀之间添加连字符

Regex 在指定的前缀和后缀之间添加连字符,regex,google-sheets,Regex,Google Sheets,假设前缀={mr,ms}和后缀={junior,senior} 我希望在指定的前缀之后和指定的后缀之前添加连字符 就个人而言,我可以做类似于=REGEXREPLACE(A1,“mr”,“mr-”)和=REGEXREPLACE(A1,“高级”,“高级”)的事情,但是有没有一种方法可以用一个公式来完成上面的所有事情?您可以使用捕获组来简化这一点。这里有两个嵌套替换,一个用于ms和mr案例,另一个用于junior和senior案例: =REGEXREPLACE(REGEXREPLACE(A38,&qu

假设
前缀={mr,ms}
后缀={junior,senior}

我希望在指定的前缀之后和指定的后缀之前添加连字符


就个人而言,我可以做类似于
=REGEXREPLACE(A1,“mr”,“mr-”)
=REGEXREPLACE(A1,“高级”,“高级”)
的事情,但是有没有一种方法可以用一个公式来完成上面的所有事情?

您可以使用捕获组来简化这一点。这里有两个嵌套替换,一个用于
ms
mr
案例,另一个用于
junior
senior
案例:

=REGEXREPLACE(REGEXREPLACE(A38,"^(mr|ms)","$1-"),"(junior|senior)$","-$1")
解释
“^(mr | ms)”

  • ^
    -字符串的开头(这样可以避免错误点击,如msmiriamreich)
  • (mr | ms)
    -捕获组,包含所有前缀的OR组合
  • 带有
    $1
解释
“(初级|高级)$”

  • (初级|高级)
    -捕获组,包含所有后缀的OR组合
  • $
    -字符串结尾
  • 带有
    $1

将两个正则表达式填充成一个是可能的,但是你会得到一个相当长的正则表达式,因为你必须考虑(有/没有前缀)和(有/没有后缀)的排列。

可以使用捕获组来简化。这里有两个嵌套替换,一个用于
ms
mr
案例,另一个用于
junior
senior
案例:

=REGEXREPLACE(REGEXREPLACE(A38,"^(mr|ms)","$1-"),"(junior|senior)$","-$1")
解释
“^(mr | ms)”

  • ^
    -字符串的开头(这样可以避免错误点击,如msmiriamreich)
  • (mr | ms)
    -捕获组,包含所有前缀的OR组合
  • 带有
    $1
解释
“(初级|高级)$”

  • (初级|高级)
    -捕获组,包含所有后缀的OR组合
  • $
    -字符串结尾
  • 带有
    $1

将两个正则表达式填成一个是可能的,但是你会得到一个相当长的正则表达式,因为你必须考虑(有/没有前缀)和(有/没有后缀)的排列。

假设前缀可以是<代码> XX < /代码>和<代码> x>代码>,但不是<代码> xxx < /代码>,所以XDave= X-Davy和XXDave= XX戴维,但是xxxdavid仍然是xxxdavid<代码>“^(x|xx)”将导致xxxdavid成为x-xxdavid,而
“^(xx|x)”
将导致xxxdavid成为xx-xxdavid。有什么方法可以防止这种情况发生吗?如果使用诸如
“^(mr | ms | xx(?x))”
之类的消极前瞻,这是可能的,但是,Google正则表达式不支持这种情况。如果名称大写,例如
XxDavid
,则可以使用区分大小写的正则表达式模式支持该大小写。假设前缀可以是
xx
x
,但不能是
xxx
,因此xdavid=x-david和XxDavid=xx-david,但xxxdavid将保持xxxdavid<代码>“^(x|xx)”将导致xxxdavid成为x-xxdavid,而
“^(xx|x)”
将导致xxxdavid成为xx-xxdavid。有什么方法可以防止这种情况发生吗?如果使用诸如
“^(mr | ms | xx(?x))”
之类的消极前瞻,这是可能的,但是,Google正则表达式不支持这种情况。如果名称大写,例如
XxDavid
,则可以使用区分大小写的正则表达式模式支持该大小写。