如何生成表示"包含正则表达式#1但不包含正则表达式#2"的正则表达式??

我正在查看RE模块的文档,但找不到如何
"不是"整个正则.
例如.....
如何使正则是"包含Regex#1但不是Regex#2"?
克里斯

# 回答1


在2008-07-01,sexpeward.navar.navy.mil (?!r)
(\ 1 |(?!\ 2))
应该做你想做的.
阿尔伯特
# 回答2


在7月1日,2:34*am," a.t.hofkamp" (?!r)
(\ 1 |(?!\ 2))
应该做你想做的.
阿尔伯特
我认为OP想要A和不是B,而不是A或不是B.如果OP想要
要进行重新匹配(A而不是B),那么我认为可以做到这一点((?!!
\ 2)\ 1),但是如果他真的想要包含A而不是B,那么我认为这是
需要2个调用重新搜索.请参阅下面的测试代码:
导入
DEF测试(限制,仪器):
打印"%s匹配%s?%s"%
(限制,仪器,bool(re.匹配(限制,inters)))
a =" AAA"
B =" BBB"
aandnotb ="(%s |(?!%s))"%(a,b)
测试(AandNotB," AAA")
测试(AandNotB," BBB")
测试(aandnotb," aaabbb")
测试(aandnotb," zaaa")
测试(AandNotB," CCC")
aandnotb ="((?!%s)%s)"%(b,a)
测试(AandNotB," AAA")
测试(AandNotB," BBB")
测试(aandnotb," aaabbb")
测试(aandnotb," zaaa")
测试(AandNotB," CCC")
DEF TEST2(ARESTR,BRESTR,INSTER):
打印"%s包含%s,但不是%s?%s"%\
(仪器,arter,brester,
布尔(Re.Search(Arester,Instr)和
不re.Search(Brester,inst))))
test2(a,b," aaa")
test2(a,b," bbb")
test2(a,b," aaabbb")
test2(a,b," zaaa")
test2(a,b," ccc")
印刷:
(AAA |(?!bbb))匹配AAA?真的
(AAA |(?!bbb))匹配BBB?错误的
(AAA |(?!bbb))匹配AAABBB?真的
(aaa |(?!bbb))匹配zaaa?真的
(AAA |(?!bbb))匹配CCC?真的
((?!bbb)AAA)匹配AAA?真的
((?!bbb)AAA)匹配BBB?错误的
((?!bbb)AAA)匹配AAABBB?真的
((?!bbb)AAA)匹配ZAAA?错误的
((?!bbb)AAA)匹配CCC?错误的
AAA包含AAA,但不包含BBB?真的
BBB包含AAA,但不包含BBB?错误的
AAABBB包含AAA,但不包含BBB?错误的
ZAAA包含AAA,但不包含BBB?真的
CCC包含AAA,但不包含BBB?错误的
正如我们之前所见,海报并不总是最精确的
描述他们是否想要匹配与搜索.鉴于OP使用了
"包含"一词,我读到这是指"搜索".我不是Re Pro
无论如何,我认为OP想要的行为是
最后4个测试,我不知道该如何在一次RE中进行.
- 保罗
# 回答3


匹配" foo.*bar",除非在foo和bar之间出现"不".
导入
s ='fooaaaabbbbar'
打印"应该匹配:",S
m = re..match(r'(foo(.(?!not)*bar)*bar)',s);
如果m:
打印M.Groups()
打印
s ='fooaaaanotbbbbar'
打印"不应该匹配:",S
m = re..match(r'(foo(.(?!not)*bar)*bar)',s);
如果m:
打印M.Groups()
==输出==
应该匹配:fooaaaabbbbar
('fooaaabbbbar','b')
不应该匹配:fooaaaanotbbbbbar
*****
传输的信息仅针对所解决的人员或实体,并可能包含机密,专有和/或特权材料.其他审查,重新传播,传播或其他使用或采取任何行动,以依靠其他人或实体来依靠这些信息 禁止预期的接收者.如果您错误地收到此信息,请联系发件人并从所有计算机中删除材料. GA621
# 回答4


修复了" Foonotbar"的错误.从概念上讲,它分解为:
first_half_of_regex#1(不
REGEX#2)(any_char_not_followed_by_regex#2)*second_ half_of_regex#1
但是,如果可能的话,我将把它做成两次及格.匹配
REGEX#1,丢弃所有匹配的比赛,然后在Regex#2上匹配.两次
更快,更易于编码和理解.易于理解==少
机会的机会.如果您担心表现,则a)a)
复杂的正则态度可能比两个简单的言论更快,也可能不会更快,并且
b)如果您通过正则传递大量数据,您可能是我/O
无论如何.
导入
SS =('Foobar','Fooaaabbbbar','fooaaaanotbbbbar','fooaaanotbar','fooaaaanotbar'
" foonotbbbbar"," foonotbar")
对于SS中的S:
印刷,
m = re..match(r'(foo(?!non)(?
如果m:
打印M.Groups()
别的:
打印
==输出==
Foobar('Foobar',)
fooaaabbbbar('fooaaaabbbbar',)
fooaaanotbbbbar
fooaaanotbar
foonotbbbbar
Foonotbar
*****
传输的信息仅针对所解决的人员或实体,并可能包含机密,专有和/或特权材料.禁止任何审查,重新传播,传播或其他使用或采取任何行动,以依靠预期接收者以外的人或实体来依靠此信息.如果您错误地收到此信息,请联系发件人并从所有计算机中删除材料. GA621

标签: python

添加新评论