0

是的,所以 RegExp 对我来说是相当新的,它仍然让我感到困惑。无论如何,我设法找到了几乎所有我想要的名字,但现在我必须寻找其中包含世界特定部分的名字,但如果旁边还有另一个名字则排除。

所以基本上

"Cat"但是,如果有"Dog"然后排除此字符串,则查找:

CatBlablablaDog = exclude
blablaCatBlabla = include
Dog_blabla_Cat = exclude

Atm 我正在使用它来查找我的名字, '*Cat*'我想我也可以使用/*.Cat/或类似的东西(我不记得我在某处写过的确切符号)那么我必须添加什么来排除 Dog 对象?(我用 Python 编码)

如果我不能这样做,也许我可以遍历对象并寻找除 Dog 之外的其他名称。然后遍历新的非狗名称以获取猫名称?这意味着我输入什么不寻找狗的名字?:)

谢谢再见。

4

2 回答 2

2

使用负前瞻:

^(?!.*dog).*cat.*$

它将首先测试dog字符串中是否没有其他内容。如果否定前瞻成功,则继续匹配包含cat. 您可能希望使用(?i)标志在其中启用忽略大小写。

在 python 中,您还可以使用re.IGNORECASE

>>> import re
>>> ignorecase = re.compile(r'(?i)(?!.*dog).*cat.*')
>>> print ignorecase.match("CatBlablablaDog")
None
>>>
>>> print ignorecase.match("blablaCatBlabla")
<_sre.SRE_Match object at 0x956b090>
>>>
>>> print ignorecase.match("Dog_blabla_Cat")
None
于 2013-07-31T16:13:58.660 回答
1

为@Rohit Jain 的回答提供替代的非正则表达式解决方案

没有正则表达式的单行(在中使用它):

>>> (lambda s: 'cat' in s and 'dog' not in s)("CatBlablablaDog".lower())
False
>>> (lambda s: 'cat' in s and 'dog' not in s)("blablaCatBlabla".lower())
True
>>> (lambda s: 'cat' in s and 'dog' not in s)("Dog_blabla_Cat".lower())
False

使用某种更正式的函数:

def findExclude(string, search_str, exclude_str):
    string = string.lower()
    return search_str in string and exclude_str not in string

print findExclude("CatBlablablaDog", 'cat', 'dog')
print findExclude("blablaCatBlabla", 'cat', 'dog')
print findExclude("Dog_blabla_Cat", 'cat', 'dog')
于 2013-07-31T16:59:36.020 回答