Python 与Windows和linux中的正则表达式不同的结果?
我已经为需要匹配文件名开头的项目拼凑了一些代码。下面是在Windows中运行的代码Python 与Windows和linux中的正则表达式不同的结果?,python,regex,linux,python-2.7,Python,Regex,Linux,Python 2.7,我已经为需要匹配文件名开头的项目拼凑了一些代码。下面是在Windows中运行的代码 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)
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错误
,其中打印ID返回NONE
我知道这意味着没有匹配,因此不会生成ID。
由于唯一的区别是从Windows移动到Linux,两个系统之间的不同要求是什么?
我怎样才能使它按预期工作?错误,它不是
/d
而是\d
,因此您的代码是
ID = re.match('^\d{1,10}', fn).group()
\d
匹配一个数字,即,[0-9]
您的代码也不能匹配Windows中的任何内容,因为/d{1,10}
匹配一个正斜杠,并且在1到10个d
字符之间。由于fn
是一个没有目录路径的文件名,因此该名称中永远不会有斜杠。@MartijnPieters他在文件名中放斜杠的位置?@AvinashRaj:斜杠在模式中。它永远不能在文件名中。@MartijnPieters如果您将您的评论作为答案发布会更好。@AvinashRaj您的答案很多。我只是在说明这在Windows上起作用的说法,这是不可能的。哈哈。有时候你只需要一双眼睛。感谢又短又甜,+1:)