正则表达式无法正确接收我的模式

时间:2019-06-13 09:16:19

标签: python regex

上下文

我当时正在挑战“简单符号” CoderByte,并且想使用正则表达式,因为为什么不这样做,现在只是不想在将来遇到这种情况。

直接来自CoderByte的挑战:

让函数SimpleSymbols(str)接受传递的str参数,并通过返回字符串true或false来确定它是否是可接受的序列。 str参数将由+和=符号组成,它们之间有几个字母(即++ d + === + c ++ == a),并且要使字符串为真,每个字母必须用+符号包围。因此,左侧的字符串将为false。该字符串将不为空,并且将至少包含一个字母。

问题摘要

我的问题是我的正则表达式模式(?!\+)[a-zA-Z](?!\+)没有使用“ == a +”。我认为该模式的作用是寻找没有加号包围的字母符号,但是找不到“ == a +”,我根本不知道为什么。

代码

import re

def SimpleSymbols(string):
    pat = r'(?!\+)[a-zA-Z](?!\+)'
    has_pat = re.search(pat, string) == None
    return has_pat

print(SimpleSymbols('+x==+x+').lower()) # False
print(SimpleSymbols('+x+==+x+')) # True
print(SimpleSymbols('x')) # False
print(SimpleSymbols('2+x+x+')) # True
print(SimpleSymbols('==a+')) # False, but wrongly returns True

解决方案

非常感谢WiktorStribiżew找到了解决方法\b[a-zA-Z]\b(?<!\+[a-zA-Z](?=\+))。我不知道为什么我的不起作用,也不知道为什么不起作用,但是我有解决挑战的办法。

monK_也有[^+][a-zA-Z]|[a-zA-Z][^+]的漂亮解决方案,这更能说明问题。谢谢!!!

1 个答案:

答案 0 :(得分:0)

使用以下模式

[^+][a-zA-Z]|[a-zA-Z][^+]

如果可以找到模式,则该字符串不符合质询的规则。