匹配

2016-05-18 45 views
1

我試圖找出如何創建一個正則表達式,這將包括以下兩個行正則表達式的選用組:匹配

02-09-16 08:57PM    24768 Invoice - Copy.docx 

05-14-16 08:49PM  <DIR>   Bin 

兩者都是一個目錄列表的結果。第一個是包含文件大小的文件。第二個是沒有大小但包含<Dir>類型的目錄。

這讓我捕捉到所有的數據到名爲組,但第一線的大小是捕獲到類型字段:

(?<Date>\S+)\s+(?<Time>\S+)\s+(?<Type>\S+)\s+(?<Name>.+) 

如果可能的話,我想結束與這兩個類型和尺寸。我不知道如何同時查找這兩種方法,但是如果發現了其中一種,則可以忽略其中的一種。

更新:基於Wiktor的的迴應,我已經更新的正則表達式,並得到接近:

(?<Date>\S+)\s+(?<Time>\S+)\s+(?:(?<Type>\S+)|\d+)\s+(?<Name>.+) 

使用這個我可以很容易地分析兩條線。然而,第一行24768在類型組中結束。是否可以同時擁有一個Type和一個額外的Size組?邏輯是類似的東西如果碰到字符(例如'<Dir>'),那就是Type;如果碰上號碼(24768),其大小

+1

大約什麼['^ \ S + \ S +( \ S +?)(

+0

我很欣賞這種努力,但是1.您已經完全刪除了類型組,並且2它不適用於第一行。 – Mike

+0

什麼是正則表達式引擎?你的長期目標是什麼?這看起來像Windowsy - 使用PowerShell生成目錄列表,並使其成爲一種易於解析的格式...''dir |選擇姓名,LastWriteTime,@ {N =「目錄?」; E = {$ _。PsIsContainer}},長度| Export-CSV out.csv -NoTypeInfo'或其他。 – TessellatingHeckler

回答

1

剛組的類型和大小捕捉到AA非捕獲或組:

^(?<Date>\S+)\s+(?<Time>\S+)\s+(?:(?<Size>\d+)|(?<Type>\S+))\s+(?<Name>.+)$ 

大小字段將拿起位,否則你得到一個類型。

+0

Bra-freakn-vo,Regex對我來說相當新穎,非常感謝。 – Mike