2011-07-26 27 views
-1

我的文件名格式如下正則表達式來檢查2凸顯了文件名

ABCDefg_01012004_1.txt 
ABCDefg_01012004.txt 
ABCDefg_01012005.txt 
ABCDefg_01012006.txt 

我在文件名

尋找一個正則表達式,會告訴我,如果我有兩個「_」
+2

用什麼語言? –

+1

你的意思是兩個下劃線_anywhere_,或連續兩個下劃線?你能給我們提供你想要正則表達式匹配的文本的例子嗎? – Anirvan

+0

語言是C#,它們不在行中,它們將按照我的示例中的文本進行分隔 – Alex

回答

6

這將這樣的伎倆:

var re = new Regex("_.*_"); 
var matches = re.IsMatch("ABCDefg_01012004_1"); // true 

使用+而不是*如果必須有下劃線之間至少有一個字符。

如果你想匹配正好兩個下劃線字符串(無多,不會少),你可以使用:

var re = new Regex("^[^_]*_[^_]*_[^_]*$"); 
+0

這不會匹配超過2個下劃線,比如'a_b_c_d'嗎? – sln

+0

@sln:好點。我將添加一個編輯 – Cameron

3

正如卡梅隆已經提到/_.*_/含有(至少)兩個下劃線的字符串匹配。但是,您也可以使用C#的IndexOf(...)。執行以下操作:如果有(至少)在s兩個下劃線,並且如果只有一個或沒有下劃線存在時,它會計算爲False

s.IndexOf("_") != s.LastIndexOf("_") 

將評估爲True

0

從你的例子:

/[A-Za-z]+_[0-9]+_[0-9]\.txt/ 

更加嚴格:

/[A-Z]{4}[a-z]{3}_[0-9]{8}+_[0-9]\.txt/ 

我看到在過去的數塊,它可以用來進一步限制它的日期。 :)

ABCDefg_01012005.txt

/[A-Z]{4}[a-z]{3}_[0-3][0-9][01][0-9]20[0-9]{2}+_[0-9]\.txt/ 

例如,如果我們只是處理日期二〇〇〇年至2099年和DDMMYYYY形式。

1

我想你說它必須只有2個下劃線,並且不能是下一個
彼此。

/^[^_]*_[^_]+_[^_]*$/

+0

哦,剛剛看到你的答案後添加我的幾乎相同的編輯迴應你的評論。 +1! – Cameron