这是一个搜索当前目录中PDF文件的示例。
import os, os.path
import re
def print_pdf (arg, dir, files):
for file in files:
path = os.path.join(dir, file)
path = os.path.normcase(path)
if re.search(r".*\.pdf", path):
print path
os.path.walk('.', print_pdf, 0)
有人可以解释一下r".*\.pdf"
的含义吗?
为什么".*\"
?
谢谢!
答案 0 :(得分:8)
它表示任何字符零次或多次,后面是文字点和字母pdf(由于星号的贪婪性质,它基本上保证'.pdf'
将在主题的末尾字符串)。
有glob
模块以正确的方式执行此操作:
>>> glob.glob(os.path.join(dirname, '*.pdf'))
答案 1 :(得分:3)
为什么
".*\"
?
错误的问题,你错过了表达的关键特征。 ; - )
事实上,.*
会匹配任何字符(正则表达式中为.
),尽可能多次(*
在正则表达式中;与前一个字符串相关,因此在这种情况下为.
。
\.
将恰好匹配一个点(.
)。 \
转义后续字符(.
),因此它不再具有其特殊含义(例如,在这种情况下“匹配任何字符”),但它将被视为-is。
答案 2 :(得分:2)
.
表示匹配任何字符,但“\ n”。 *
表示“重复前一个字符0次或更多次”。 \.
与实际的“。”匹配。
顺便说一下,这都在the docs。
答案 3 :(得分:1)
这将搜索包含零个或多个字符后跟“.pdf”的字符串。*是regexp中的常用习语,它表示匹配任何字符0次或更多次。的。是因为在regexps中。具有特殊意义,并且\逃脱了。
答案 4 :(得分:0)
期间(。)
将匹配除换行符之外的任何字符
以下星号(*)
意味着无限次数的重复
前一期
反斜杠()
逃避.pdf期间所以它寻找一个真实的
期间,所以只有.pdf,而不是“任何
字符“.pdf再次”
所以最后它寻找 任何以.pdf结尾的文本
答案 5 :(得分:0)
使用os.walk()代替。并且不需要使用正则表达式。
for r,d,f in os.walk(path):
for files in f:
if files[-4:].lower() == ".pdf":
print "found pdf: ",os.path.join(r,files)