Trimming Course Расписание данных с использованием регулярного выражения - PullRequest
0 голосов
/ 24 февраля 2011

Мне нужна ваша помощь в использовании регулярных выражений для извлечения информации о времени из следующих типов данных:

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?

аналогичный вопрос

Ответы [ 3 ]

0 голосов
/ 03 января 2014

Немного поздно, но попробуйте:

Поиск что: .*?(\d+(?::\d+)?(?:[ap]m?)?-\d+(?::\d+)?(?:[ap]m?)?).*
Заменить на: $1

0 голосов
/ 19 февраля 2017

Я понял, что могу просто разбить строку, используя space в качестве разделителя, и получить 2-й элемент возвращаемого списка.

0 голосов
/ 24 февраля 2011

Вы, вероятно, могли бы сделать это намного проще на уровне 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.

...