2010-05-02 35 views
1

我有一個要求。在運行時替換模式的正則表達式(C#3.0)

我有一個文件夾,其中一些文件名看起來像說

**EUDataFiles20100503.txt, MigrateFiles20101006.txt.** 

基本上這些都是我需要在工作文件中的一些文件。

現在我已經在那裏提到的文件模式類型

EUDataFilesYYYYMMDD,MigrateFilesYYYYMMDD一個配置文件。

基本上這個想法是,用戶可以配置文件模式,並根據提到的模式,我需要搜索文件夾中存在的文件。

在運行時,YYYYMMDD將被年月和日期值取代。無論日期會在哪裏(但不包括時間戳;僅限於日期))無關緊要。

而且的EUDataFiles或MigrateFiles名稱將在那裏。(他們是固定的)

即如果該文件夾中有一個文件名EUDataFile20100504.txt(即二零一零年,月05,04日),我應忽略此文件,因爲它不是EUDataFiles20100504.txt(請注意,名稱是複數 - 文件而不是系統將忽略文件的文件)。

類似地,如果以EUDataFilesYYYYMMDD形式給出的模式以及存在的文件是EUDataFilesYYYYDDMM類型,那麼系統也應該忽略。

我該如何解決這個問題?它是否可以使用正則表達式(在運行時替換模式)?

如果有的話,任何人都可以幫到我嗎?

我使用的是C#3.0和dotnet framework 3.5。

感謝

+0

EUDataFilesYYYYMMDD和EUDataFilesYYYYDDMM不能清楚地分開 - 20100112怎麼辦? – 2010-05-02 19:42:04

回答

1

您可以構建從基本的文件名正則表達式加(取決於模式)子正則表達式。

子正則表達式可能是

yyyy = @"\d{4}" 

(除非你想限制某一年份範圍),通過在正確的順序將它們添加

mm = @"(1[0-2]|0[1-9])" 
dd = @"(3[01]|[12][0-9]|0[1-9])" 

建立你的正則表達式:

re = @"\AEUDataFiles" + yyyy + mm + dd + @"\.txt\Z" 

然後你可以檢查你找到的文件名是否與正則表達式匹配:

foundMatch = Regex.IsMatch(subjectString, re); 

當然,這不是驗證正確的日期(20100231會通過),但這可能不是一個問題在這種情況下。

+0

是的,但您可以閱讀用戶選擇的模式,並相應地重新排列正則表達式,對不對?如果用戶選擇DDMMYYYY,那麼你需要建立're = @「\ AEUDataFiles」+ dd + mm + yyyy + @「\。txt \ Z」' – 2010-05-02 20:13:53