我正在尝试使用以下代码匹配确切的模式,以对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 :(得分: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].*)?
-字符串的结尾。