如何在PostgreSQL中提取字符串中以'M'开头的所有单词
提取所有以'M'开头的单词解决方案
核心正则表达式
要匹配所有以'M'开头的完整单词,用正则 \bM\w+ 即可:
\b:匹配单词边界,确保'M'是单词的开头(避免匹配类似"xMary"这种字符串里的Mary)M:指定单词首字母为大写M\w+:匹配后续的字母、数字或下划线(覆盖常见的单词字符)
不同场景的实现示例
Python环境
直接用re.findall全局提取所有匹配项,再拼接成目标格式:
import re input_str = '[{"name": "Mary", "type": "Dog"}, {"name": "Max", "type": "Dog"}]' m_words = re.findall(r'\bM\w+', input_str) result = ', '.join(m_words) print(result) # 输出: Mary, Max
PostgreSQL SQL
用regexp_matches配合string_agg实现:
SELECT string_agg(match, ', ') AS extracted_words FROM regexp_matches( '[{"name": "Mary", "type": "Dog"}, {"name": "Max", "type": "Dog"}]', '\bM\w+', 'g' -- 'g'表示全局匹配 ) AS match;
Spark SQL
用regexp_extract_all提取所有匹配,再拼接:
SELECT concat_ws(', ', regexp_extract_all(your_column, '\\bM\\w+', 0)) AS extracted_words FROM your_table;
为什么之前的方法不生效
regex_replace是替换字符,不是提取匹配项,没法直接拿到目标单词substring只能截取单个位置的片段,无法遍历字符串找到所有符合条件的单词
内容的提问来源于stack exchange,提问作者maintheme
相关产品推荐
相关产品推荐

