2014-03-25 72 views
0

我試圖設置一個基於一些條件的匹配語句。安裝 - 匹配語句

這些是我的條件: 包含節假日的行遵循這些規則。

  • 它們包含文本「標題」,其次是
  • 一個或多個任意字符,然後
  • 文本「時:」(注意空格),其次是
  • 3 「字」字符和空格,然後是
  • 日期格式爲「dd mmm yyyy」(即「2012年12月31日」),然後是
  • 字符不是空格,「單詞」或「數字「

與加下劃線的項目符號點匹配的字符是需要提取的字符,並將其轉換爲[日期時間]值並返回給調用者。

數據樣本基於假期日期。焦點線處於BOLD狀態。

<br />Event Status: confirmedhttp://www.google.com/calendar/event?eid=MjAxNTAyMTRfNjBvMzBkcjQ2c28zMGMxZzYwbzMwZHI0Y28gdXNhX19lbkBo' title='alternate'/>http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic/20150214_60o30dr46so30c1g60o30dr4co'/>Holidays in United States http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic/20140214_60o30dr46so30c1g60o30dr4ck 2014-03-24T19:02:40.000Z2014-03-24T19:02:40.000Zhttp://schemas.google.com/g/2005#kind' term=' http://schemas.google.com/g/2005#event '/>Valentine&#39;s DayWhen: Fri 14 Feb 2014<br><br>Who: Holidays in United States

這是我到目前爲止有: 'title.*when:\s+(\w{1,3})\s(?<Date>)(?\S\W\D)'

我得到這個錯誤:

parsing "title.*when:\s+(\w{1,3})\s(?<Date>)(?\S\W\D)" - Unrecognized grouping construct. At D:\test.ps1:9 char:8 + if ($_ -match 'title.*when:\s+(\w{1,3})\s(?<Date>)(?\S\W\D)') + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId : System.ArgumentException

我做了什麼錯?

+0

你缺少正規的一部分表達式與實際日期匹配 –

+0

我應該用'\ d {1,2} \ s \ w {1,3} \ s \ d {1,4}'替換(??)嗎? – learn2code

+0

是的,訣竅,'(? ...)'構造被稱爲「命名組」,它只是提供了一種檢索方式匹配的文本。你可以這樣做:'(? \ d {1,2} \ s \ w {1,3} \ s \ d {1,4})',然後你可以從「日期「組。閱讀一下「有名的團體」。 –

回答

0

我覺得你在這裏出軌:

(?<Date>)(?\S\W\D) 

命名組構建物(後跟正則表達式和閉括號:

(?<Date>?\S\W\D) 
+0

我不明白「2014年2月14日」這樣的日期可能會如何匹配。這甚至不是一個有效的正則表達式。 –