在python中,正则表达式是否可以匹配某组字母,只要它们不';不按顺序发生吗?
我正试图从目录中筛选出文件。它们的名称通常如下所示:在python中,正则表达式是否可以匹配某组字母,只要它们不';不按顺序发生吗?,python,regex,Python,Regex,我正试图从目录中筛选出文件。它们的名称通常如下所示: Foo_101.zip Bar\u 99.zip McFoo_103.zip Baz\u HELLO\u 56.zip Foo\u Bar\u 99.zip 我对要匹配的文件名的要求如下: 大写(例如,Baz_103.zip) 有一个或多个字母(大写或小写),其中没有一个包含HELLO(例如Foo\u Baz\u McBar\u 99.zip) 有一个或多个下划线(例如Foo\u Bar\u Baz\u 100.zip) 下划线不能与其他
Foo_101.zip
Bar\u 99.zip
McFoo_103.zip
Baz\u HELLO\u 56.zip
Foo\u Bar\u 99.zip
Baz_103.zip
)HELLO
(例如Foo\u Baz\u McBar\u 99.zip
)Foo\u Bar\u Baz\u 100.zip
)Foo\uu Bar\u 101.zip
无效,因为有两个下划线彼此相邻).zip
扩展名前以下划线和一个或多个数字结尾(例如Foo\u Bar\u Baz\u 100.zip
以\u 100.zip
结尾)Baz_HELLO_56.zip,因为它没有满足第二个要求:它有一个或多个字母,所有字母都包含HELLO
我最接近于消极前瞻的是:
^([A-Z]{,1}[a-zA-Z]+[\-_])+(?!HELLO_\d+.zip)\d+.zip$
它成功地排除了Baz_HELLO_56.zip
。但是,它也不包括McFoo_103.zip
我有没有办法调整这个正则表达式模式,只排除
Baz_HELLO_56.zip
,而不排除McFoo_103.zip
?你可以用能反映你的第二和第四个要求的头像做你想做的事情,然后匹配整个名字,以大写字母开始,包括字母、
和-
,以\uuu
结尾,数字和.zip
:
^(?!.*HELLO)(?!.*__)[A-Z][A-Za-z_-]*_\d+\.zip$
请注意,您的第三项要求自动包含在第五项要求中
您还可以使用一个向前看来断言HELLO不会发生,匹配大写字符,后跟混合的大写和小写字符 然后使用以下划线开头并匹配混合大小写字符的重复模式来防止相邻的下划线
^(?!.*HELLO)[A-Z][A-Za-z]*(?:_[A-Za-z]+)*_\d+\.zip$
关于图案
字符串的开头^
负前瞻,断言没有HELLO出现(或使用HELLO)(?!*HELLO)
匹配单个字符A-Z,然后0+乘以字符A-Za-Z[A-Z][A-Za-Z]*
重复0+次匹配(?:[A-Za-z]+)*
后接1+次字符A-Za-z
匹配\ud+\.zip
\ucode>,1+位和
.zip
字符串结尾$
您具体匹配的是什么?因为你可以只做
^Baz\u HELLO\u 56\.zip$
,但显然这不是你想要的。我已经澄清了问题中的要求。你说“它有一个或多个字母组成HELLO
”是什么意思?一个字母“HELLO”如何构成?我发现我的部分解释与要求不符。我会解决的。