代码之家  ›  专栏  ›  技术社区  ›  Thomas Price

使用替换文本中的模式替换正则表达式

  •  0
  • Thomas Price  · 技术社区  · 7 年前

    regex_replace 在替换文本中?我想在名字之间插入一个空格。

    Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D) ,我正在尝试将输出设置为 Johnny Smith Sarah Suzanne(D) Johnny Smith Sarah Suzanne(D)

    我试过这样的方法:

    SELECT 
        'Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)'
        , regexp_replace('Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)', '[a-z)][A-Z]',' ', 'g');
    

    我意识到我的模式一开始就错了。。。(还在想办法)但在我继续之前,这可能吗?有人能告诉我怎么做吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   sticky bit    7 年前

    您似乎在寻找捕获组。

    SELECT 'Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)',
            regexp_replace('Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)', '([a-z)])([A-Z])','\1 \2', 'g')
    

    如果在阵列中用括号括起零件(在 ( ,则会更改组的含义),将捕获与该部分模式匹配的字符串。使用“\”可以在替换表达式中引用这些捕获的字符串,匹配的字符串将放在那里。 n 是从左到右的捕获组的编号,嵌套时子级在父级之前。

        2
  •  0
  •   Hambone    7 年前

    select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)', ') ', 'g')
    

    select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)(\w)', ') \1', 'g')