使用正则表达式删除Mysql中列值中的括号()

Posted

技术标签:

【中文标题】使用正则表达式删除Mysql中列值中的括号()【英文标题】:Delete the Parenthesis () in column value in Mysql using regex [duplicate] 【发布时间】:2017-11-27 12:22:21 【问题描述】:

请查找示例列值:

`pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value should remove)`  

expected output is: pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18`

我尝试了示例正则表达式代码删除空格后的字符

select REGEXP_EXTRACT("pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value should remove)",r(.*) ') as ptr ;

我得到了预期的输出,但是对于其他列值具有的值却失败了:

`(pffhjdhfjdhjhfjdhjfd:etr ptr) -- output getting (pffhjdhfjdhjhfjdhjfd:etr`

我该如何解决这个问题?请帮帮我

【问题讨论】:

我怀疑你正在使用 mysql.. MySQL 没有 REGEXP_EXTRACT 函数.. @RaymondNijland 我正在使用 Biq 查询,它具有 REGEXP_EXTRACT 功能。如果我们能够在 MYSQL 中解决这个问题。我会在 BQ 中重现它 @Fran 删除电话号码中的括号对我不起作用。因为字段值可能包含许多括号,我的要求是删除字符串末尾的 () 值 试试r'\s*\([^)]*\)$' 问题并没有说它只需要从开头和结尾删除括号,但在字符串中保留其他括号。您也应该将其添加到问题中。最好使用另一个示例字符串值:(example()text) 预期:example()text,假设是这种情况。 【参考方案1】:

如果你只想从字符串中删除最后一组括号,你可以使用 REGEXP_REPLACE:

WITH test_data AS ( SELECT ["pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value should remove)", "pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18", "pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value stays) (this value should remove)"] AS s ) SELECT REGEXP_REPLACE(t ,r'([^(]*)$', '') AS ptr FROM test_data JOIN UNNEST(test_data.s) as t

【讨论】:

以上是关于使用正则表达式删除Mysql中列值中的括号()的主要内容,如果未能解决你的问题,请参考以下文章

[MySQL] 用正则表达式进行搜索

如何使用正则表达式删除字符串中的括号符号

如何使用正则表达式删除括号内的文本?

怎么通过正则表达删除含中文的括号部分但保留含英文的括号部分?

第九章 使用正则表达式进行搜索

正则表达式REGEXP