我当时正在挑战“简单符号” 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][^+]
的漂亮解决方案,这更能说明问题。谢谢!!!
答案 0 :(得分:0)
使用以下模式
[^+][a-zA-Z]|[a-zA-Z][^+]
如果可以找到模式,则该字符串不符合质询的规则。