我尝试使用正则表达式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=40
和X=10Y=2W=30H=40
不应编译为有效字符串。
我将其更改为([XYWH]=[0-9]+\s)
,但由于最后一个组H=40
不包含空格,因此无法与之匹配。
答案 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}
答案 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.I
或re.IGNORECASE
:
pattern = re.compile('^(?:[xywh]=\d+ ){3}[xywh]=\d+$', re.IGNORECASE)
^(?:[xywh]=\d+ ){3}[xywh]=\d+$
<强>解释强>
^
在行的开头断言位置(?:
非捕获组
[xywh]=\d+
Character class,其中包含x
,y
w
或h
后跟=
和一个或多个数字\d+
后跟一个空格。){3}
关闭非捕获组并重复3次。[xywh]=\d+
符合x
,y
w
或h
后跟=
和一个或多个数字{{1}的字符类}} \d+
断言行尾