【发布时间】:2021-04-20 14:13:34
【问题描述】:
我正在尝试匹配两个基本相同但它们之间可能有不同数量的空格的字符串。
a = 'Lorem. Ipsum'
b = 'Lorem. Ipsum'
我删除了它们之间的多余空格并在匹配之前添加了转义字符。
a = re.sub(r'\s+', r' ', a)
a = re.escape(a)
b = re.sub(r'\s+', ' ', b)
b = re.escape(b)
但是,以下代码中的字符串不匹配
print(bool(re.match(b, a)))
>False
我在这里错过了什么?
【问题讨论】:
-
不要再
re.escape(),或re.escapeb。但是,我怀疑您想要print(a==b),只是看看a和b是否相等。见ideone.com/W2Fv6O -
顺便说一句,您的标题是错误的,不是您删除了多余的空格的问题。问题是您使用固定/文字字符串作为正则表达式模式来匹配相同的字符串。
-
@WiktorStribiżew 我将实际问题简化为这种形式。在实际问题中,我会尝试检查字符串 b 是否在 a 中。至于您的解决方案,“不要重新转义(),或者重新转义b。”和您在链接中的解决方案相矛盾。
print(bool(re.match(re.escape(b), a))) -
不,没有矛盾。
re.escape在字符串中引入反斜杠,空格前的反斜杠阻止它匹配。Lorem. Ipsum正则表达式将匹配Lorem. Ipsum字符串,所以要么不要re.escape任何东西,要么re.escapeb当用作正则表达式模式时。 -
另外,要检查
a是否包含b,您只需要if b in a。所以,a = 'Lorem. Ipsum'; b = 'Lorem. Ipsum'; print( re.sub(r'\s+', r' ', b) in re.sub(r'\s+', r' ', a) )。在正则表达式世界中,您需要使用re.search,因为re.match只在字符串开头查找匹配项。