正则表达式遇到一些困难

时间:2018-04-20 00:10:47

标签: python regex

我尝试使用正则表达式X=10 Y=2 W=30 H=40匹配字符串([x|y|w|h|X|Y|W|H]=\d+)\s但是它不匹配整个字符串。我需要它只匹配上面的格式,没有别的。此X=10,Y=2,W=30,H=40X=10Y=2W=30H=40不应编译为有效字符串。

我将其更改为([XYWH]=[0-9]+\s),但由于最后一个组H=40不包含空格,因此无法与之匹配。

2 个答案:

答案 0 :(得分:2)

([XxYyWwHh]=\d+ ?){4}

这需要恰好4个匹配,并且除了将空格用作字段之间的分隔符之外的任何内容都可以防止。但是,它也允许结束(H =)结束而没有该分隔符。 https://regex101.com/r/O87qlt/3/

您可以使用它以任何顺序捕获组。 (但结果捕获始终为X Y W H顺序):

(?:(?:X=(\d+)|Y=(\d+)|W=(\d+)|H=(\d+)) ?){4}

https://regex101.com/r/O87qlt/5

答案 1 :(得分:1)

要与X=10 Y=2 W=30 H=40匹配,您可以将前3个X=10 Y=2 W=30(?:[xywh]=\d+ )匹配,其中包含最后的空格,并重复3次{3}

要匹配没有空格的最后一部分,您可以使用[xywh]=\d+。要获得完全匹配,您可以使用锚点来断言行的开始^和结束$

要匹配[xywh]的大写和小写字符,您可以使用不区分大小写的标记i。在Python中,您可以使用re.Ire.IGNORECASE

启用此功能

pattern = re.compile('^(?:[xywh]=\d+ ){3}[xywh]=\d+$', re.IGNORECASE)

^(?:[xywh]=\d+ ){3}[xywh]=\d+$

<强>解释

  • ^在行的开头断言位置
  • (?:非捕获组
    • [xywh]=\d+ Character class,其中包含xy wh后跟=和一个或多个数字\d+后跟一个空格。
  • ){3}关闭非捕获组并重复3次。
  • [xywh]=\d+符合xy wh后跟=和一个或多个数字{{1}的字符类}}
  • \d+断言行尾

Demo Python