2014-06-25 41 views
0

我已经把需要匹配的项目的一些代码放在一起作为文件名的开头。以下是在Windows中工作的代码。来自Windows和Linux的正则表达式的不同结果?

for root, dirs, files in os.walk(up_path): 
    files.sort() 
    total_files += len(files) 
    print total_files 
    for fn in files: 
     print fn 
     filename_zero, extension = os.path.splitext(fn) 
     path2 = os.path.join(root, fn) 
     ID = re.match('^/d{1,10}', fn).group() 
     print ID 

在Windows中,如果一个文件被命名为1234567-1.jpg,从打印ID的结果将是1234567
但是,在Linux中,我得到一个Nonetype error,其中打印ID返回NONE
我知道这是什么意思,没有匹配,因此没有生成ID。
由于唯一的区别是从Windows迁移到Linux,两个系统之间的不同要求是什么?
如何按预期做到这一点?

+4

您的代码也不能匹配在Windows中任何东西,如'/ d {1 ,10}'匹配一个文字正斜杠和1到10个'd'字符。由于'fn'是一个没有目录路径的文件名,因此在这个名称中不会有斜杠。 –

+0

@MartijnPieters在哪里他把斜杠放在文件名中? –

+0

@AvinashRaj:斜杠在* pattern *中。它永远不会*在*的文件名。 –

回答

2

错误,这不是/d\d,使你的代码会是这样,

ID = re.match('^\d{1,10}', fn).group() 

\d一个数字,即匹配,[0-9]

+0

哈哈。有时候另一双眼睛是你需要的。谢谢 – dbell

+0

短而甜,+1 :) – zx81