2011-02-24 76 views
0

课程表的数据,我需要你使用正则表达式来提取下列类型的数据的时间信息的帮助:修剪使用正则表达式

TTh 7-8:30AM lec AIT PANEL D          
WF 1-2:30PM lec BA 104           
S 9:00a-12:00p lec CPA 306          
MTh 7:00a-8:30a lec AIT PANEL D         
TTh 2:30-4PM lec BA 104           
TTh 2:30-4PM lec BA 104           
TTh 4-5:30PM lec CPA 301           
S 9AM-12PM lec TBA            
Sa 09:00a-12:00p lec BA 301          
Sa 09:00a-12:00p lec BA 301          
MTh 08:30a-10:00a lec BA 301          
TTh 1-2:30PM lec CPA 301           
TTh 7-8:30AM lec AIT PANEL D 

因此,大家可以看到,这些设置courses.This时间表的值是包含其他属性(由制表符分隔)并存储在文本文件中的更大的数据集的一部分, 。我想修剪这些日程表值 所有非时间相关的信息,使他们成为以下,

例如:

7-8:30AM         
1-2:30PM 
9:00a-12:00p 
7:00a-8:30a 
2:30-4PM 
2:30-4PM 
4-5:30PM 
9AM-12PM 
09:00a-12:00p 

好了,这是我知道的时间表值:

  1. 计划值中的标记由空格分隔。
  2. 时间标记具有数字,短划线,冒号,并且可以包含 个字母AM,PM,a,p。

我有这种感觉,这对你们来说可能是一件容易的事, 不幸的是,我对正则表达式并不熟悉。

这就是为什么我非常需要你的帮助。 非常感谢!

PS: 我正在使用Notepad ++编辑文件, 如果有一种方法可以使用Notepad ++来做到这一点。 或者我也可以使用Update命令在MySQL中执行此操作吗?

similar question

回答

0

我意识到,我可以只拆分使用space作为分隔符的字符串,并获得第2返回列表的元素。

0

你也许可以在MySQL的水平,而不是在正则表达式这样做容易得多。我不熟悉mySQL,但我认为有一个等价于TSQL的CharIndexSUBSTRING_INDEX

这里是快速和肮脏的使用TSQL一行 - 绝不声称是有效的,但它的作品,你要适应通过您的原始数据进行迭代,并转换到MySQL的语法:

declare @scheduleLine varchar(500); 
Set @scheduleLine = 'TTh 7-8:30AM lec AIT PANEL D'; 
declare @firstSpace int, @secondSpace int; 
Set @firstSpace = CHARINDEX(' ',@scheduleLine,0); 
Set @secondSpace = CHARINDEX(' ',@scheduleLine, @firstSpace+1) 
Declare @timeOfClass varchar(20) 
Set @timeOfClass = SUBSTRING(@scheduleLine, @firstSpace, (@[email protected])); 
Select @timeOfClass as TimeOfClass 

将导致:

7-8:30AM 

只需使用相当于mySQL的。

+0

非常感谢! :) – ultrajohn 2011-02-24 23:02:36

0

有点晚,但与一试:

搜索什么:.*?(\d+(?::\d+)?(?:[ap]m?)?-\d+(?::\d+)?(?:[ap]m?)?).*
替换:$1