正则表达式如何匹配所有标点但排除某些条件

时间:2016-04-05 02:49:55

标签: java regex

我可以使用\p{Punct}来匹配所有标点符号(包括下划线)。

我想在一个单词中严格排除所有撇号。为此,我使用(?<=[a-zA-Z])'(?=[a-zA-Z])

然而,我不能让它们一起工作以匹配除撇号之外的所有标点符号。

我应该使用什么?

的示例:

my brother's这不应该匹配。

my brothers'这应该匹配。

my 'brother'这些应匹配。

2 个答案:

答案 0 :(得分:4)

您可以在此处结合三个条件。

  1. 使用<Window.Resources> <Style TargetType="Button" x:Key="aimDark"> <Setter Property="VerticalAlignment" Value="Top" /> <Setter Property="Margin" Value="5,5,5,0" /> <Setter Property="Height" Value="20" /> <Setter Property="Foreground" Value="#0e0e0e" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Border CornerRadius="4" BorderBrush="#000000" BorderThickness="1"> <Border.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Color="#006d23" Offset="0" /> <GradientStop Color="#006d23" Offset="0.05" /> <GradientStop Color="#00c741" Offset="0.45" /> <GradientStop Color="#00c741" Offset="1" /> </LinearGradientBrush> </Border.Background> <RenderOptions.EdgeMode>Aliased</RenderOptions.EdgeMode> <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources>

  2. 匹配除撇号'之外的所有标点符号
  3. 匹配所有撇号后面没有字母。

  4. 匹配所有撇号后面没有字母。

  5. 正则表达式: [\p{Punct}&&[^']]

    <强>解释

    • [\p{Punct}&&[^']]|(?<![a-zA-Z])'|'(?![a-zA-Z])从标点符号类中排除了撇号。

    • [\\p{Punct}&&[^']]匹配撇号后面没有字母。

    • (?<![a-zA-Z])'匹配撇号后面没有字母。

    <强> DEMO HERE

答案 1 :(得分:0)

您可以手动排除撇号,对您感兴趣的所有标点符号进行分组。然后将该组与您的规则结合起来,以便通过OR找到正确的撇号(不在单词内)。