2012-03-24 86 views
1

我需要在搜索目錄時檢查文件擴展名。將列表中的字符串轉換爲re.search的原始字符串

如果使用re來做匹配工作。那些'。'被解釋爲正則表達式''。

我的代碼:

extension = ['.c','.h'] 
path = 'foo\bar\foobar.c' 

def skipCheck(path): 
    global extension 
    skip = True 
    for i in extension : 
     if(re.search(i,path)): 
      skip = False 
return skip 

我知道我可以用反斜槓來做到這一點。

extension = ['\.c','\.h'] 

但它並不容易使用和配置。我想保留['.c','。h']輸入樣式。

有沒有辦法將其轉換並保存到re.search的另一個原始字符串列表中。

+2

「原始字符串」是指形式爲「r」foo「'的文字。你所擁有的只是弦,弦。 – katrielalex 2012-03-24 10:56:45

+0

你正在提出的正則表達式也會捕獲像'spam.ham.eggs'和'.config'這樣的文件。 – 2012-03-24 14:44:27

回答

6
  1. 請勿使用regexen; Python已經有os.path.splitext

    def skip_check(path): 
        return os.path.splitext(path)[1] in extensions 
    

    如果你真的必須使用正則表達式,你可以調用re.escape逃避所有正則表達式元字符。

  2. 請勿聲明extension global;你沒有分配給它,所以你不需要。另外,你應該叫它extensions

+0

如果其中一個擴展名具有多個分隔符(「.tar.gz」),這會遇到困難,這是我經常遇到的用例。 – DSM 2012-03-24 10:57:16

+1

@DSM:true - 但是對於多個擴展沒有明確定義的行爲。 '.tar.gz'很常見,但'.dvi.pdf'不是。 (注意''.tar.gz'實際上是一個tar文件,它實際上是兩個擴展名。) – katrielalex 2012-03-24 11:01:11

+1

擴展的語法數[給定某些設置來繪製]並不總是對應於語義數,所以即使「.tar.gz」有兩個擴展名,「.tgz」有一個擴展名,我經常需要分支一些類似於filename.endswith((「。tar.gz」,「.tgz」)的東西。 +1無論如何,它只是令人討厭的是,正確的事情在普通情況下不能很好地工作。 – DSM 2012-03-24 11:29:59

相關問題