re.match在两个不同的字符串上返回true

时间:2015-06-02 14:34:12

标签: python regex string

我正在使用python的re.match函数通过忽略这样的几个字符来比较两个字符串:

import re

url = "/ChessBoard_x16_y16.bmp/xyz"

if re.match( '/ChessBoard_x.._y..\.bmp', url ):
    print("true")
else:
    print("false")

问题#1: 输出为真但我想在这里假,因为在 .bmp 问题后,网址会有额外的内容#2:我在这里使用了两个点来忽略值16(x16 & y16),但实际上这个值可以包含任意数量的数字,如x8, x16, x256等那么我该怎么做才能忽略由任意数字组成的完整值?

2 个答案:

答案 0 :(得分:3)

试试正则表达式

'/ChessBoard_x[\d]+_y[\d]+\.bmp$'

一个小型演示(也可以试试Regex101

>>> import re
>>> pat = re.compile('/ChessBoard_x[\d]+_y[\d]+\.bmp$')
>>> url = "/ChessBoard_x162_y162.bmp"
>>> pat.match(url).group()
'/ChessBoard_x162_y162.bmp'
>>> url = "/ChessBoard_x16_y16.bmp/xyz"
>>> pat.match(url).group() 
>>> # Does not match 

答案 1 :(得分:2)

问题1:您需要指定您希望字符串在正则表达式的末尾终止。 $运算符执行此操作:

re.match("/ChessBoard_x.._y..\.bmp$", url)

问题2:你想要的是一个或多个数字。 \ d字符类匹配数字,+将匹配其中的一个或多个。我用\ d +替换这两个点:

re.match("/ChessBoard_x\d+_y\d+\.bmp$", url)