我试图在正则表达式中生成一个If-然后-否则条件语句。
regex接受一个表示文件名的字符串作为输入。
这是我的测试线..。
The Edge Of Seventeen 2016 720p.mp4
20180511 2314 - Film4 - Northern Soul.ts
20150526 2059 - BBC Four - We Need to Talk About Kevin.ts在第一个字符串中,2016年代表一年,而在另外两个字符串中,2314和2059代表24小时时钟格式的时间。
如果文件名与此regex匹配,则文件名应保持不变:
\d{8} \d{4} -.*?- .*?\.ts我已经测试过了,而且效果很好。它可以匹配以下测试字符串:
20180511 2314 - Film4 - Northern Soul.ts
20150526 2059 - BBC Four - We Need to Talk About Kevin.ts如果文件名与第一个regex不匹配,则应将该regex应用于它:
(.*[^ _\,\.\(\)\[\]\-])[ _\.\(\)\[\]\-]+(19[0-9][0-9]|20[0-9][0-9])([ _\,\.\(\)\[\]\-]|[^0-9]$)?这是一个清洁时间regexp,Kodi使用它来删除字符串中的所有内容,如果它存在四位数,则表示1900到2099年之间的日期。我也测试过这个,它很有效。
下面是我试图做的,如果-然后- Regex,但它不起作用:
我使用这种格式->((A)X\Y)
(?(\d{8} \d{4} -.*?- .*?\.ts)^.*$|(.*[^ _\,\.\(\)\[\]\-])[ _\.\(\)\[\]\-]+(19[0-9][0-9]|20[0-9][0-9])([ _\,\.\(\)\[\]\-]|[^0-9]$)?)这是A
\d{8} \d{4} -.*?- .*?\.ts这是X
^.*$这是Y
(.*[^ _\,\.\(\)\[\]\-])[ _\.\(\)\[\]\-]+(19[0-9][0-9]|20[0-9][0-9])([ _\,\.\(\)\[\]\-]|[^0-9]$)?这是预期的输出。
测试字符串:边缘十七年720p.mp4 预期输出:“十七零一六年的边缘”(引号仅用于显示尾端可以留出一个尾随空间)
测试字符串: 20180511 2314 - Film4 - Northern Soul.ts 预期输出: 20180511 2314 - Film4 - Northern Soul.ts
测试字符串: 20150526 2059 - BBC 4-我们需要讨论Kevin.ts 预期输出: 20150526 2059 - BBC 4-我们需要谈论Kevin.ts
我正在寻找一个完全用正则表达式语法的解决方案。有人能帮我把它修好吗?
干杯,
Flex
发布于 2020-02-25 07:55:22
您可以使用PCRE模式,如
^(?!\d{8} \d{4} -.*?- .*?\.ts$)(.*[^ _,.()\[\]-][ _.()\[\]-]+(?:19|20)[0-9]{2})(?:[ _,.()\[\]-]|[^0-9]$)?.*用$1替换,请参阅regex演示。
相配
^ -字符串的开始(?!\d{8} \d{4} -.*?- .*?\.ts$) -如果整个字符串与匹配,则负查找失败\d{8} \d{4} -8位数,空格,4位数,空格-.*?- .*? - -,则任何0或多个字符(除断行字符以外),尽可能少,-和一个空格,然后再一次使用0或多个字符(除换行字符之外),尽可能少。\.ts$ - .ts
(.*[^ _,.()\[\]-][ _.()\[\]-]+(?:19|20)[0-9]{2})(?:[ _,.()\[\]-]|[^0-9]$)?.*:一个可选的组1,然后字符串的其余部分:.* -除行中断字符以外的任何0+字符尽可能多[^ _,.()\[\]-] -除[ _.()\[\]-]+ - 1+空间,_,.,(,),[,]或-(?:19|20) - 19或20[0-9]{2} -两位数(?:[ _,.()\[\]-]|[^0-9]$)? -一个可选的非捕获组,用于匹配空格、_、.、(、)、[、]或-或字符串末尾的数字以外的任何字符。.*[^ _,.()\[\]-][ _.()\[\]-]+(?:19|20)[0-9]{2})(?:[ _,.()\[\]-]|[^0-9]$.* -除行中断字符以外的任何0+字符尽可能多。
发布于 2020-02-25 09:25:48
由于您已经提到了A、X和Y是经过测试和发现有效的,而且由于只有2种模式,所以我认为这个模式会工作(Python ):
pattern = "(.?(?=" + A + ")" + X + ")|(" + Y + ")"这意味着:
(.?(?=A)X)|(Y)解释:
X,另一组用于Y。X的组以.?开头,目的是让引擎开始移动,并检查前面是否有与X匹配的部分(查找)。如果是,它将继续进行匹配的X,因为它将在展望块之后遇到它。| (或)部分,即Y将接管。如果匹配的话,你就会得到结果。否则,没有输出。(遗憾的是,您发布的A和Y的模式在Python上并不适用,所以我用自己的模式进行测试。请确认该模式是否与原始模式一起工作。)
https://stackoverflow.com/questions/60386155
复制相似问题