Python正则表达式:多个正则表达式导致问题



这个问题的一个基本版本是使用正则表达式将abc like '%FFddsdE%'转换为LOWER(abc) like '%ffddsde%'
下面的代码工作得很好

import re
text = "abc like '%FFddsdE%'"
print("before: " + text)
text = re.sub('([^ ^n]+?) ?like ?'([^ ]+)'', 
lambda s: f'LOWER({s.group(1)}) like '{s.group(2).lower()}'', 
text, flags=re.I)
print("after: " + text)

#the output is
#before: abc like '%FFddsdE%'
#after: LOWER(abc) like '%ffddsde%'

然而,如果我们想把这个问题扩展一点,到likenot like,一切都崩溃了

import re
text = "abc not like '%FFddsdE%' and bcd like '%XyZ%'"
print("before: " + text)
text = re.sub('([^ ^n]+?) ?not like ?'([^ ]+)'', 
lambda s: f'LOWER({s.group(1)}) not like '{s.group(2).lower()}'', 
text, flags=re.I)
text = re.sub('([^ ^n]+?) ?like ?'([^ ]+)'', 
lambda s: f'LOWER({s.group(1)}) like '{s.group(2).lower()}'', 
text, flags=re.I)
print("after: " + text)
#the output is
#before: abc not like '%FFddsdE%' and bcd like '%XyZ%'
#after: LOWER(abc) LOWER(not) like '%ffddsde%' and LOWER(bcd) like '%xyz%'

输出LOWER(not)

我正在使用python 3 btw。谢谢你的帮助!

您可以使用另一组同时匹配likenot like

import re
text = "abc not like '%FFddsdE%' and bcd like '%XyZ%'"
print("before: " + text)
text = re.sub('([^ ^n]+?) ?(like|not like) ?'([^ ]+)'',
lambda s: f'LOWER({s.group(1)}) {s.group(2)} '{s.group(3).lower()}'',
text, flags=re.I)
print("after: " + text)
# before: abc not like '%FFddsdE%' and bcd like '%XyZ%'
# after: LOWER(abc) not like '%ffddsde%' and LOWER(bcd) like '%xyz%'

相关内容

  • 没有找到相关文章

最新更新