REGEXP_REPLACE用于精确的正则表达式模式,不起作用

时间:2019-06-12 15:46:34

标签: regex amazon-redshift regexp-replace

我正在尝试使用以下代码匹配确切的模式,以对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

我想念什么?

1 个答案:

答案 0 :(得分:4)

您可以使用

    <Border Grid.Column="2" BorderBrush="HotPink" BorderThickness="2" MinHeight="100" MinWidth="100">
        <Border.Style>
            <Style TargetType="{x:Type Border}">
                <Setter Property="Visibility" Value="{Binding ElementName=GenerateWorkOrders, Path=IsChecked, Converter={StaticResource booleanToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(componentModel:DesignerProperties.IsInDesignMode)}" Value="true">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
        <Label Content="Not Visible While Editing"/>
    </Border>

请参见regex demo

详细信息

  • ^([0-9]{4}-?[Xx0-9]{4})([^0-9].*)?$ -字符串的开头
  • ^-捕获组1(([0-9]{4}-?[Xx0-9]{4})):四个数字,一个可选的$1,然后是四个- / x或数字
  • X-可选的捕获组2:除数字外的任何字符,然后尽可能多的0+个字符
  • ([^0-9].*)?-字符串的结尾。