PostgreSQL正则表达式作业求助:匹配括号内三位大写字符行数不符
问题原因
- 正则未匹配目标格式的括号:你要匹配的是
(XXX)这类带括号的内容,但你的正则purpose, ([A-Z]{3})完全没处理括号——括号在正则里是分组元字符,必须用\(和\)转义才能匹配实际的括号符号。 - 前缀限定过紧:你的正则要求目标内容必须紧跟
purpose,,如果其中一行的符合条件内容(比如(TNR)/(NCH)/(CSU))不是在这个前缀之后,就会被过滤掉,这就是少一行的核心原因。
修复方案
根据你的实际需求选择对应的正则:
- 仅匹配含
(XXX)格式的行(不限位置):
直接匹配括号加三位大写字母的格式,用这个SQL条件:WHERE your_text_column ~ '\([A-Z]{3}\)' - 必须匹配
purpose, (XXX)格式的行:
把前缀和转义后的括号都加入正则,确保完全匹配目标格式:WHERE your_text_column ~ 'purpose, \([A-Z]{3}\)'
PostgreSQL的~操作符默认区分大小写,刚好适配你匹配大写字母的需求,不需要额外调整。用上面的正则就能匹配到所有3行符合要求的内容。
内容的提问来源于stack exchange,提问作者F. Y.
相关产品推荐
相关产品推荐

