Python正则表达式,用于从多种格式的文件中提取数字

时间:2017-08-22 18:40:30

标签: python regex

我需要python中正则表达式的帮助:

我在目录中有四个文件

  • TOP GEAR 5X04.mkv
  • TOP GEAR 13X02.avi
  • TOP GEAR 9X12.mkv
  • 权力的游戏S02E03.mkv

这是我在python中的正则表达式:

/.*(S[0-9]{2})E[0-9]{2}.*|.*([0-9]+)X[0-9]+.*/

然后它返回:

  

匹配1

     
      
  1.   
  2. 5
  3.         

    匹配2

         
        
    1.   
    2. 3
    3.         

      匹配3

           
          
      1.   
      2. 9
      3.         

        匹配4

             
            
        1. S02
        2.   
        3.   

在第2.2场比赛中,我有3而不是13.我怎么能得到后者呢?有什么想法吗?

我试过这个,但根本不起作用:

/.*(S[0-9]{2})E[0-9]{2}.*|.*([0-9]{1,2})X[0-9]{1,2}.*/

link Pythex

感谢。

2 个答案:

答案 0 :(得分:0)

通过添加.*来尝试在与13懒惰匹配的位之前设置?

/.*(S[0-9]{2})E[0-9]{2}.*|.*?([0-9]{1,2})X[0-9]{1,2}.*/

答案 1 :(得分:0)

正则表达式的第二部分没有标记捕获组开头的字母。您需要在第一个数字之前使用非贪婪的.*?匹配器而不是贪婪版本.*

.*(S\d{2})E\d{2}.*|.*?(\d+)X\d+.*

输出:

Match 1
1.  None
2.  5
Match 2
1.  None
2.  13
Match 3
1.  None
2.  9
Match 4
1.  S02
2.  None

Pythex link