Составить регулярное выражение
Здравствуйте уважаемые форумчане.
К сожалению мой мозг ну никак не может (или не хочет) понять логику. Короче есть у меня в файле .csv столбец с данными типа Код:
02.04 - созвонВроде всё просто 2 цифры, точка, 2 цифры, пробел, тире, пробел и буквы, но сложность в том, что: Цифры могут идти через запятую или тире После них может идти точка Разумеется не факт что после и перед тире стоит запятая Да и вместо "созвон" может быть слово "совбон" или "созвон с поставщиком" Мне же всю эту конструкцию надо разбить на "дата - событие" Дата только формата "24.04" а после тире слово "созвон" или "встреча" Может у кого есть дельный совет по этому поводу, как привести к одному формату да ещё и "разбить" на разные строки |
Гробовщик,
Выложите все возможные Варианты для одной строчки: 02.04 - созвон |
Deff, ну файлик писался для понимания человеком, а потому писался "кто во что горазд". Вот варианты, которые впринципе можно отловить программно
02.04 созвон 07,04 - встреча 08-04 - созвон 14.04.15 - созвон в 3 часа Ну и разнообразие, где то тире отсутствует, где то пробелы. Всё не соберёшь. Мне необходимо отловить как можно больше вариантов, что бы потеря данных была как можно меньше. в целом мне и надо то отловить число и событие к нему, потом добавить в базу |
>>Да и вместо "созвон" может быть слово "совбон"
это, по-моему, алгоритмически-неразрешимо. остальное как-то так.
alert(
"02.04. - созвон\n02-01-встреча\n02,04 - созвон, fuck\n02-04 - fuck встреча"
.match(/(\d\d[.,-]\d\d)\.? ?- ?([^\n]+)/g)
.map(function(s){return s.replace(/^(\d\d)[.,-](\d\d)/, "$1.$2")})
.map(function(s){return s.replace(/^(\d\d\.\d\d)(\.? ?- ?)(.+)/, function(s, sub1, sub2, sub3){
return sub1+"-"+sub3.match(/созвон|встреча/)[0]
})})
)
Если описание дано верно, должно работать PS Цитата:
|
Сначала все нормализуется, проверяется, потом хавается как обычно. В порядке ремонта. В рабочем порядке таких задач не может возникать. Или это делают не рабочие, а какие-то недоумки.
|
kostyanet,
Такая задача может возникнуть при парсинге данных с левых сайтов, для аналитики. |
Еще раз, тырить контент это не задачи и там реги вообще не нужны. Реги нужны именно под задачи, но если толком разобраться - тоже не нужны, ибо надо менять условия задачи, чтобы таких дебильных задач не возникало.
Чсв откуда берется? Из екзеля. А екзель откуда береся? От отсутствия акцесса, а отсутствие акцесса откуда? Оттуда что ниасилили. Следовательно видите как далека ретроспектива проблематики. Но решать ее все равно придется. Или что, до морковкиного заговения будем регами парсить екзели? |
Цитата:
|
Кстати, при чем тут сервер вообще? На VBA екзеля и разбирайте эту колонку.
|
Цитата:
|
var str = '02.04 совбон 07,04 - встреча и собзон \n 14.04.15 - созвон в 3 часа 08-04 - созвон';
function replacer(str){
function rep(str,p1,p2){ return p1+(p2.indexOf('встреча')==-1?'cозвон':'встреча')}
function replac(str){ return str.replace(/^(\d+)[\D]+(\d+)[\s\.,\-]+\d*[\s\.,\-]*([a-zёа-я]*.*?)[\s]*$/g,'$1.$2 - $3;\n');}
return str.replace(/[\n\r]/gm,'').replace(/(?:\d+[^a-zёа-я]+){2,3}[a-zёа-я].*?(?=(?:[\d]{2})|$)/gim,replac)
.replace(/^(\d+.\d+ - )(.*)?;$/gim,rep)
}
alert(replacer(str))
|
Гробовщик,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<textarea rows="7">
02.04 - всякая фигня + созвон
07.04 - встреча пьянка гулянка
08.04 - Созвон
14.04 - созвон
16.04 - созвон
17.04 - встреча завтра
20.04 - созвон
21.04 - созвон
24.04 - созвон
02.04 созвон
07,04 - встреча
08-04 - созвон
14.04.15 - созвон в 3 часа
</textarea>
<br>
<script>
var val = document.querySelector("textarea").value.replace(/^\s+|\s+$/g, ""),
val = val.split(/[\r\n]+/),
val = val.map(function(d) {
var c = [],
a = d.match(/\d+/ig),
b = new Date;
a && b.setMonth(a[1] - 1, a[0]);
a[2] && b.setHours(a[2]);
c.push(b.toLocaleDateString() + (a[2] ? " : " + b.getHours() : ""));
a = d.match(/[а-яё][\s\S]+$/i);
c.push(a || "");
return c
});
document.write(val.join("<br>"));
</script>
</body>
</html>
|
Чуть уменьшил
var str = '02.04 совбон 07,04 - встреча и собзон \n 14.04.15 - созвон в 3 часа 08-04 - созвон';
function replacer(str){
function rep(str,p1){return (p1.replace(/[^a-zёа-я]+/,'').length?(p1.indexOf('встреча')==-1?' - cозвон':' - встреча'):str)}
return str.split(/[\n\r]+/).join('').split(/(\d{2}\D\d{2})(?:\D\d{2,4})?/).join('\n - ')
.replace(/^.*?(\d{2})\D(\d{2}).*?$/gm,'$1.$2').replace(/ \- (.*)?$/gm,rep)
.split(/\n - /).join(' - ').replace(/^\n+/,'');
}
alert(replacer(str))
|
tysonfury2015,
Deff, рони, Ребят, большое спасибо. Прям козырно. |
рони,
Не понимаю, почему не могу добавить + в карму. Пишет: "Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его рони". Хотя до этого добавил карму 2-м форумчанам |
| Часовой пояс GMT +3, время: 08:14. |