【问题标题】:Trimming Course Schedule data using regular expression使用正则表达式修剪课程安排数据
【发布时间】:2011-02-24 14:50:16
【问题描述】:

在使用正则表达式从以下类型的数据中提取时间信息方面需要您的帮助:

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   

如您所见,这些是课程安排。这组值是更大数据集的一部分, 包含其他属性(由制表符分隔)并存储在文本文件中。我要修剪 这些时间表值中的所有非时间相关信息,因此它们变为以下内容,

例如:

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++ 做到这一点。 或者我也可以在 MySQL 中使用 Update 命令执行此操作吗?

similar question

【问题讨论】:

    标签: mysql regex notepad++ trim


    【解决方案1】:

    您可以在 mySQL 级别执行此操作,而不是在 Regex 中执行此操作。我对 mySQL 不熟悉,但我认为有一个等效于 TSQL 的 CharIndex,称为 SUBSTRING_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, (@secondSpace-@firstSpace));
    Select @timeOfClass as TimeOfClass
    

    将导致:

     7-8:30AM
    

    只需使用 mySQL 等效项。

    【讨论】:

      【解决方案2】:

      有点晚了,但试试看:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2015-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-20
          • 1970-01-01
          • 1970-01-01
          • 2011-11-16
          • 1970-01-01
          相关资源
          最近更新 更多