2011-10-31 37 views
2

我从上面的查询,我知道的单词列表示例查询写正则表达式相当于LIKE语句查询

select c.name , c.id from company c where 
c.name like 'Hoder%' and c.name like 'Stock%' amd c.name like 'Colour%' 
and c.name like '%Delete' and c.name like '%Regular' and c.name like '%Filler' 
and c.name like '%wipe%' and c.name like '%palce%' and c.name like '%double%', 
and c.name in ('IT', 'Wall', SpyCorp', 'Signal') 

,我在执行与正则表达式 表格上面的查询我写了一个正则表达式像

#for exact matching words 
pnexact = ['IT', 'Wall', SpyCorp', 'Signal'] 
regexact = [re.compile(r"\b%s\b" % word.lower()) for word in pnexact]#list of regex object 
#for words which are contain in the string eg: '%wipe%' ... 
pncontains = ['wipe','palce','double',] 
pnregexobj_contains = re.compile(r"%s" % '|'.join(pncontains)) #single regex object 

上述正则表达式工作正常,但我不能写正则表达式,这将汉勒的话'Hoder%','Stock%','Color%' 的情况和案件%Delete','%Regular','%Filler' 请建议我正则表达式,其中,W生病手柄上述两种情况

感谢

回答

1

.*更换%。例如,要匹配的话就像%Delete使用:

>>> import re 
>>> re.match(r'\b.*Delete\b', 'NoDelete') 
<_sre.SRE_Match object at 0x100456100> 
>>> _.group() 
'NoDelete' 
>>> re.match(r'\b.*Delete\b', 'Mismatch') 
+0

我写了这个正则表达式reg = re.compile(r'(\。*)delete $')为'%删除'字符串以单词delete.is结束吗? – Shashi

+0

我不认为你想反斜杠 - 逃避'''因为它把它变成一个字面的'.'字符,但正确的正则表达式与LIKE'%Delete''等价的确实应该是'。*删除$ ',或者只是'删除$'。 –

+0

@ e.dan好吧 – Shashi

1
import re 
m = lambda regex: re.match(regex, name) 

m(r'.*Delete$') # name like %Delete 
m(r'Delete') # name like Delete% 
m(r'.*Delete') # name like %Delete% 

要找出是否name是字中的一个:

pnexact = ['IT', 'Wall', 'SpyCorp', 'Signal'] # use `set()` if the list is long 
name in pnexact # name in ('IT', 'Wall', 'SpyCorp', 'Signal') 

或者,如果你想使用正则表达式:

m(r"^(?:%s)$" % "|".join(map(re.escape, pnexact))) 
0

此零件:WHERE c.name like 'Hoder%' and c.name like 'Stock%'

相当于:WHERE False

A柱(像c.name)从HoderStock同时无法启动。

您可能打算使用OR而不是AND