是的,所以RegExp对我来说还是一个新手,它仍然令我感到困惑。无论如何,我设法找到了我想要的几乎所有名字,但现在我必须寻找具有特定部分世界的名称,但如果旁边还有另一个名称则排除。
所以基本上
查找"Cat"
但是如果有"Dog"
则排除此字符串,以便:
CatBlablablaDog = exclude
blablaCatBlabla = include
Dog_blabla_Cat = exclude
Atm我正在用它来寻找我的名字
'*Cat*'
我想我也可以使用/*.Cat/
或类似的东西(我无法记住我在某处写的确切符号)
那么我必须添加什么才能排除Dog对象? (我用Python编写代码)
如果我不能这样做,也许我可以遍历对象并寻找除Dog之外的其他名字。然后遍历Cat名称的新非狗名称?这意味着我键入什么不寻找狗的名字? :)
谢谢,再见。
答案 0 :(得分: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
答案 1 :(得分:1)
没有正则表达式的单行(在repl中播放):
>>> (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')