2014-03-25 54 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日”这样的日期可能会如何匹配。这甚至不是一个有效的正则表达式。 –