RegExp查找part但排除I

2024-10-03 17:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

对,所以RegExp对我来说是相当新的,它仍然让我困惑。无论如何,我设法寻找几乎所有的名字,我想,但现在我必须寻找的名字,有特定的部分,但排除如果有另一个在它旁边的世界。你知道吗

所以基本上

查找"Cat",但是如果存在"Dog",则排除此字符串,以便:

CatBlablablaDog = exclude
blablaCatBlabla = include
Dog_blabla_Cat = exclude

我用这个找我的名字 '*Cat*'我想我也可以用/*.Cat/或类似的东西(我记不清确切的符号了,我把它写在什么地方了) 那么我需要添加什么来排除Dog对象呢?(我用Python编写代码)

如果我不能这样做,也许我可以通过循环对象和寻找其他名称以外的狗。然后在新的非狗名中迭代猫名?这意味着我要键入什么来不查找狗名?:)

谢谢,再见。你知道吗


Tags: 对象字符串include地方世界符号名字exclude
2条回答

使用负面展望:

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

它将首先测试字符串中是否没有dog。如果negative look ahead成功,那么它将继续匹配包含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

@Rohit Jain's answer提供一个替代的、非正则表达式的解决方案

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

>>> (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')

相关问题 更多 >