【发布时间】:2021-10-11 10:00:18
【问题描述】:
我想按照以下模式在文本中捕获标记:
前 2 个字符是字母并且是必需的,以 [A-Z] 或 [A-Z][0-9] 结尾,这是可选的,任何介于两者之间的字符都可以。
示例:
AA123123A1
AA123123A
AA123123123
我想匹配并捕获 在第 1 组中以 ([A-Z][A-Z]) 开头,在第 3 组中以 [A-Z] 或 [A-Z][0-9] 结尾,然后在第 2 组中以其他所有内容结束
例子:
AA123123A1 => [AA,123123,A1]
AA123123A。 => [AA,123123,A]
AA123123123 => [AA,123123123,'']
以下正则表达式在 python 中有效,但在 postgres 中无效。
regex='^([A-Za-z]{2})((?:.+)(?=[A-Za-z][0-9]{0,1})|(?:.*))([A-Za-z][0-9]{0,1}){0,1}$'
在 Postgressql 中
select regexp_matches('AA2311121A1',
'^([A-Za-z]{2})((?:.+)(?=[A-Za-z][0-9]{0,1})|(?:.*))(.*)$','x');
结果:
{AA,2311121A1,""}
我正在尝试探索为什么积极的前瞻行为与 python 不同,以及如何在这种情况下使 Postgres 中的积极前瞻工作。
【问题讨论】:
标签: regex postgresql positive-lookahead