我希望在某些日历数据中找到30, 12/1, 2, 3
等等,我是从html解析而不是2014
或09:30
到目前为止,我已经尝试了
[\d]{1,2}[/]?[\d]{1,2}[^:]
和许多不同的变化,但似乎没有什么适合。
有没有办法用一个正则表达式找到所需的日期,或者要求0 - 31
或字符串包含数字和/
之间的数字更有意义?
谢谢你的帮助:)
修改
我解析的数据如下所示:
30
Name, Ofsomeone
Name, Ofsomeone
Name, Ofsomeone
weg.ics
GMT+01:00Amsterdam,Berlin,Bern,Rome,Stockholm,Vienna
weg:December2014
Day
WorkWeek
Week
Month
Today
December2014
December2014
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
12/1
Name, Ofsomeone
Name, Ofsomeone
Name, Ofsomeone
2
Name, Ofsomeone
Name, Ofsomeone
3
Name, Ofsomeone
Name, Ofsomeone
答案 0 :(得分:2)
听起来你想要的规则是:1到31之间的数字,单独作为一个单词(不是日期,时间,4位数字等的一部分),或者是m / d格式的日期
我们假设您愿意接受任何1位或2位数字,而不是试图拒绝75
或38/2
或2/30
正则表达式本身。
[\d]{1,2}
部分 - 尽管那里的括号确实不需要。/
和数字来编写它会更有趣,所以让我们这样做。?
修饰符附加到其中,这意味着一个组。并且大概你不想分开捕捉这一天,所以它是一个非捕获组。^
和$
模式。所以:
^\d{1,2}(?:/\d{1,2})?$
如果 希望将1-31写入正则表达式,您可能希望将其更改为可选的1-12和斜杠,然后是1-31,这将是一个大混乱(^(?:(?:\d|(?:1[0-2]))/)?(?:(?:[12]?\d)|(?:3[01]))$
);如果你想根据第一个价值处理30和29 ......那就试试吧。
这是对最初陈述的不同问题的原始答案。
听起来你想要的规则是:两个(1或2位数)数字用连字符或带有可选空格的斜杠分隔。
所以,只需将其转换为语法:
[\d]{1,2}
部分 - 尽管那里的括号确实不需要。[/]?
更改为[-/]
。\s*
。09:30
已经不符合该模式。所以:
\d{1,2}\s*[-/]\s*\d{1,2}
请注意,它匹配1 - 31
,10/27
,11/1
,12/1
的所有内容,且与2014
或09:30
不匹配。< / p>
答案 1 :(得分:0)
这可能适合你:
[\d]{1,2} ?([^:][\/]|-) ?[\d]{1,2}
注意:我们需要在[\d]{1,2}
之间的标记,在第一个之后的空格和第二个之间的空格可以是可选的,我们使用空间之后的?
进行操作并且在模式的中心不可能是:
([^:])
,可以是/
([\/])
或(|
)-
。