REGEX Ruby Rails - PullRequest
       4

REGEX Ruby Rails

0 голосов
/ 19 декабря 2018

У меня есть:

string = "4/28 - Declined 4/19 - Call with Bob, Joe and Steve 4/10 - Call scheduled for 10a on 4/18 4/9 - Wants to meet with Jay on 4/28 at 10:30a"

Я пытаюсь создать массив, который дает массив из четырех элементов:

4/28 - Declined
4/19 - Call with Bob, Joe and Steve
4/10 - Call scheduled for 10a on 4/18
4/9 - Wants to meet with Jay on 4/28 at 10:30a

У меня проблемы со следующим:

string.scan(/\d{1,2}+\/\d{1,2}[\s]?[-|:]+\s[A-Za-z\s\d]+ (?![\d{1,2}\/\d{1,2}]* -)/)

Я получаю:

["4/19 - Call with ", "4/10 - Call scheduled for 10a on ", "4/9 - Wants to meet with Jay on "]

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Похоже, натуральный разделитель это \d{1,2}+ / \d{1,2} \s? [-:]+

Так что вы можете использовать это в отрицательном утверждении, чтобы получить тело сообщения.

\d{1,2}+/\d{1,2}\s?[-:]+(?:(?!\d{1,2}+/\d{1,2}\s?[-:]+)[\S\s])*

https://regex101.com/r/o8Grdx/1

Форматированный

 \d{1,2}+ / \d{1,2} \s? [-:]+ 
 (?:
      (?! \d{1,2}+ / \d{1,2} \s? [-:]+ )
      [\S\s] 
 )*
0 голосов
/ 19 декабря 2018
string.split(%r{(\d+/\d+ - )}).drop(1).each_slice(2).map(&:join)

Выход:

[
  "4/28 - Declined ",
  "4/19 - Call with Bob, Joe and Steve ",
  "4/10 - Call scheduled for 10a on 4/18 ",
  "4/9 - Wants to meet with Jay on 4/28 at 10:30a"
]
0 голосов
/ 19 декабря 2018

Попробуйте это регулярное выражение:

(\d{1,2}\/\d{1,2}.+?(?:(?=\d{1,2}\/\d{1,2} - )|\z))

Проверьте результат здесь http://rubular.com/r/04VL4Qs7Kb

Возвращает эти совпадения:

Match 1
1.  4/28 - Declined
Match 2
1.  4/19 - Call with Bob, Joe and Steve
Match 3
1.  4/10 - Call scheduled for 10a on 4/18
Match 4
1.  4/9 - Wants to meet with Jay on 4/28 at 10:30a

Важные части:

начинается с "даты", а затем с чего-либо еще (обратите внимание на последний ?, он делает .+ или .* "не жадными")

\d{1,2}\/\d{1,2}.+?

вплоть доследующая «дата, за которой следует тире» ИЛИ конец строки (это ИЛИ важно, или вы не получите последнее совпадение)

(?=\d{1,2}\/\d{1,2} - )|\z)

, что ?: существует, чтобы игнорировать группуна результат

(?:(...))

в противном случае вы получите пустую вторую группу на каждый матч

Match 1
1.  4/28 - Declined
2.   
Match 2
1.  4/19 - Call with Bob, Joe and Steve
2.   
Match 3
1.  4/10 - Call scheduled for 10a on 4/18
2.   
Match 4
1.  4/9 - Wants to meet with Jay on 4/28 at 10:30a
2.   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...