具有开始和结束匹配的正则表达式

时间:2015-11-30 16:47:02

标签: regex python-2.7

我在Python上匹配正则表达式的开头和结尾时遇到了问题。 基本上我对何时使用单词边界^ $和开始/结束锚点^[A-Z]{2}\d{2}

感到困惑

我的正念

^[A-Z]{2}\d{2}$ # this doesn't work

匹配4个字母的字符(两个大写字母,两个数字),这是我之后的

匹配AJ99,RD22,CP44等

但是,我也注意到AJAJAJAJAJAJAJAJAJSJHS99也可以匹配。我已经尝试过使用^和$来匹配整个字符串。这不起作用

^[A-Z]{2}\d{2} # this is fine 
[A-Z]{2}\d{2}$ # this is fine

s = "NZ43" # 4 characters, match perfect! However....
s = "AM27272727" # matches the first example 
s = "HAHSHSHSHDS57" # matches the second example

我匹配的字符串长度为4个字符,但在前两个示例中,正则表达式可以分别选择较长字符串的开头和结尾。

<Grid x:Name="MainGrid" Width="1000" Height="600">
    <Grid x:Name="MainGrid" HorizontalAlignment="Left" Height="600" VerticalAlignment="Top" Width="1000">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="500"/>
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="*" MinWidth="200"/>
        </Grid.ColumnDefinitions>
        <ScrollViewer Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalScrollBarVisibility="Visible">
            <TextBox Grid.Column="0" x:Name="textBox" Text="Doei, Hoi" MinWidth="200"/>
        </ScrollViewer>
        <GridSplitter Grid.Column="1" x:Name="gridSplitter" HorizontalAlignment="Center" Height="auto" Margin="0,0,0,0" VerticalAlignment="Stretch" Width="5" ResizeDirection="Columns" Background="#FF464444"/>
        <ScrollViewer Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalScrollBarVisibility="Visible">
            <TextBox Grid.Column="2" x:Name="textbox1" Text="Hoi, Doei" MinWidth="200"/>
        </ScrollViewer>
    </Grid>
</Grid>

2 个答案:

答案 0 :(得分:3)

位置定位^$限制匹配字符的位置:

分析完整的正则表达式:

^[A-Z]{2}\d{2}$
  • ^仅在文字开头匹配
  • [A-Z]{2}正好是2个大写的Ascii字母字符
  • \d{2}正好是2位数(相当于[0-9]{2}
  • $仅在文字末尾匹配

如果您删除了2个位置锚点中的一个或两个(^$),则可以匹配从上面开始或结束开始的子字符串。

如果你想在不使用字符串的开头/结尾的情况下完全匹配单词,请使用\b锚点,如下所示:

``\b[A-Z]{2}\d{2}\b``
  • \b匹配文字的开头/结尾和正则表达式之间(在正则表达式中,单词char \w旨在作为[a-zA-Z0-9_]之一)并且单词组中的一个字符(可用作\W)。

上面的正则表达式匹配所有下一个字符串中的 WS24

  • WS24
  • before WS24
  • WS24 after
  • before WS24 after
  • NZ43

不符合

  • AM27272727(如果是AM27 272727AM27"272727
  • ,则会执行此操作
  • HAHSHSHSHDS57(如果HAHSHSHSH DS75或......你会得到它)

demo online(该网站对您也有用,可以试用正则表达式)。

答案 1 :(得分:0)

您所显示的行为就像它应该是的那样,您的问题表明您可能还没有完全理解正则表达式的工作原理。

作为GsusRecovery的非常好且信息丰富的答案的补充,here是一个网站,它引导您完成正则表达式的概念,并尝试通过基于课程的系统教您基础知识。要明确的是,我不想吹捧这个网站,因为有很多这样的网站,但是我真的可以使用这个,所以它是我建议的那个。