【发布时间】:2019-10-27 04:39:06
【问题描述】:
我正在尝试使用下面的代码匹配一个精确的模式来为 ISSN 做一些数据清理:
select case when REGEXP_REPLACE('1234-5678 ÿþT(zlsd?k+j''fh{l}x[a]j).,~!@#$%^&*()_+{}|:<>?`"\;''/-', '([0-9]{4}[\-]?[Xx0-9]{4})(.*)', '$1') not similar to '[0-9]{4}[\-]?[Xx0-9]{4}' then 'NOT' else 'YES' end
我想要的模式匹配任何 8 位组,中间可能有破折号,最后可能有 X。
上面的代码适用于大多数情况,但如果捕获组 1 是以下示例:123456789 那么它也会返回正数,因为它匹配前 8 位数字,我不希望它这样做。
我尝试使用 ^...$ 包围捕获组 1,但这也不起作用。
所以我想完全匹配这些示例和类似示例:
1234-5678
1234-567X
12345678
1234567X
但不是这些(和类似的):
1234567899
1234567899x
我错过了什么?
【问题讨论】:
-
试试
^([0-9]{4}-?[Xx0-9]{4})([^0-9].*)?$。顺便说一句,将[\-]?替换为-?。 -
完美,有效!谢谢你。我确实需要它来识别可能的空格和破折号,所以我这样做了:
^([0-9]{4}[\\s|\-]?[Xx0-9]{4})([^0-9].*)?
标签: regex amazon-redshift regexp-replace