如何删除遵循某种模式的子字符串
How to remove substrings that follow a pattern
我有一个查询 returns 一个包含我需要清理的字符串的列。我想删除此字符串中以“,id:”开头并在“)”之前结束的部分。该字符串可能多次出现要删除的子字符串。 “id:”后面的字母数字子串的长度始终相同。
这是一个示例字符串:
(label:Boston,include:true,id:9fc53def-0b9d-45cb-8f12-d42c3ca70ab2),
(label:Cambridge,include:true,id:dda3d6d7-f9d1-45ac-ac6e-5866b356966e)
这是我希望在最后看到的字符串:
(label:Boston,include:true),
(label:Cambridge,include:true)
SELECT regexp_replace(
'(label:Cambridge,include:true,id:dda3d6d7-f9d1-45ac-ac6e-5866b356966e)',
',?\mid:.{36}', -- pattern
'', -- replacement
'g' -- flag: replace multiple occurrences
);
regexp_replace
════════════════════════════════
(label:Cambridge,include:true)
(1 row)
解释模式:
,?
匹配逗号,如果有
\m
匹配单词的开头
.{36}
匹配36个任意字符
试试这个对你有帮助......
select SUBSTRING('label:Boston,include:true,id:9fc53def-0b9d-45cb-8f12-d42c3ca70ab2',1,LEN('label:Boston,include:true,id:9fc53def-0b9d-45cb-8f12-d42c3ca70ab2')-40) as stringaa;
starts with ",id:" and ends right before ")"
SELECT regexp_replace(string, ',id:[0-9a-f-]{36}\)', ')', 'g');
您的描述中逗号和右括号都不是可选的。
或者使用更严格的模式来匹配标准的 Postgres UUID 格式,如 described in the manual:
SELECT regexp_replace(string
, ',id:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\)'
, ')', 'g');
相关:
- Avoid PG::InvalidTextRepresentation error when using Postgres UUID in Rails
- Regex remove all occurrences of multiple characters in a string
我有一个查询 returns 一个包含我需要清理的字符串的列。我想删除此字符串中以“,id:”开头并在“)”之前结束的部分。该字符串可能多次出现要删除的子字符串。 “id:”后面的字母数字子串的长度始终相同。
这是一个示例字符串:
(label:Boston,include:true,id:9fc53def-0b9d-45cb-8f12-d42c3ca70ab2),
(label:Cambridge,include:true,id:dda3d6d7-f9d1-45ac-ac6e-5866b356966e)
这是我希望在最后看到的字符串:
(label:Boston,include:true),
(label:Cambridge,include:true)
SELECT regexp_replace(
'(label:Cambridge,include:true,id:dda3d6d7-f9d1-45ac-ac6e-5866b356966e)',
',?\mid:.{36}', -- pattern
'', -- replacement
'g' -- flag: replace multiple occurrences
);
regexp_replace
════════════════════════════════
(label:Cambridge,include:true)
(1 row)
解释模式:
,?
匹配逗号,如果有\m
匹配单词的开头.{36}
匹配36个任意字符
试试这个对你有帮助......
select SUBSTRING('label:Boston,include:true,id:9fc53def-0b9d-45cb-8f12-d42c3ca70ab2',1,LEN('label:Boston,include:true,id:9fc53def-0b9d-45cb-8f12-d42c3ca70ab2')-40) as stringaa;
starts with ",id:" and ends right before ")"
SELECT regexp_replace(string, ',id:[0-9a-f-]{36}\)', ')', 'g');
您的描述中逗号和右括号都不是可选的。
或者使用更严格的模式来匹配标准的 Postgres UUID 格式,如 described in the manual:
SELECT regexp_replace(string
, ',id:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\)'
, ')', 'g');
相关:
- Avoid PG::InvalidTextRepresentation error when using Postgres UUID in Rails
- Regex remove all occurrences of multiple characters in a string