Объедините два набора временных рядов [дубликат]

Регулярное полностью совместимое с RFC 822 неэффективно и неясно из-за его длины. К счастью, RFC 822 был заменен дважды, а текущая спецификация адресов электронной почты - RFC 5322 . RFC 5322 приводит к регулярному выражению, которое можно понять, если его изучить в течение нескольких минут и достаточно эффективно для фактического использования.

Одно регулярное выражение, совместимое с RFC 5322, можно найти в верхней части страницы в http : //emailregex.com/ , но использует шаблон IP-адреса, который плавает по интернету, с ошибкой, которая позволяет 00 для любого из десятичных значений без знака в разделителе с точкой, что является незаконным. Остальная часть, по-видимому, согласуется с грамматикой RFC 5322 и проходит несколько тестов с использованием grep -Po, включая имена доменов, IP-адреса, плохие и имена учетных записей с кавычками и без них.

Исправление 00 в шаблоне IP, мы получаем рабочее и довольно быстрое регулярное выражение. (Очистить визуализированную версию, а не уценку, для фактического кода.)

(?: [A-z0-9! # $% & Amp; '* + / =? ^ _ `{ |} ~ -] +:; | - * | "((\ [а-z0-9 # $% & амп '* + / = ^ _` {} ~] +?.!?): [\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21 \ x23- \ X5b \ x5d- \ x7f] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) * ") @ (? : (?: [а-z0-9] (: [а-z0-9 -] * [а-z0-9]) \?.) + [а-z0-9] (?: [а-z0 -9 -] * [а-z0-9]) |? \ [(:( :( 2 (5 [0-5?] | 1 [0-9 | [0-4] [0-9]) ] [0-9] | [1-9] [0-9])) \) {3} (:( 2 (5 [0-5] |?.? [0-4] [0-9]) | 1 [0-9] [0-9] | [1-9] [0-9]) | [а-z0-9 -] * [а-z0-9]:? (: [\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21- \ X5a \ x53- \ x7f] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) +) \])

Здесь диаграмма машины конечного состояния для вышеперечисленного регулярного выражения, которая более ясна, чем сама регулярная регрессия

Более сложные шаблоны в Perl и PCRE (библиотека регулярных выражений, например, на PHP) могут правильно разобрать RFC 5322 без заминки . Python и C # тоже могут это сделать, но они используют другой синтаксис из этих первых двух. Однако, если вы вынуждены использовать один из многих менее мощных языков сопоставления с образцами, тогда лучше всего использовать настоящий парсер.

Также важно понимать, что проверка его в RFC абсолютно ничего не говорит о том, действительно ли этот адрес существует в поставляемом домене, или является ли лицо, входящее в адрес, его истинным владельцем. Люди подписывают других до списков рассылки таким образом все время. Фиксирование, требующее более любезной проверки, которая включает отправку этого адреса, сообщение, которое включает токен подтверждения, предназначенный для ввода на той же веб-странице, что и адрес.

Подтверждающие жетоны - единственный способ узнать, что вы получили адрес человека, входящего в него. Вот почему большинство списков рассылки теперь используют этот механизм для подтверждения регистрации. В конце концов, любой может подавить president@whitehouse.gov, и это будет даже разоблачать как законное, но вряд ли это будет на другом конце.

Для PHP вы должны не используйте шаблон, указанный в . Подтвердите адрес электронной почты с помощью PHP, правильный путь , из которого я цитирую:

Существует некоторая опасность того, что общее использование и широкое небрежное кодирование установит фактический стандарт для адресов электронной почты, который является более ограничительным, чем записанный формальный стандарт.

Это не лучше, чем все другие шаблоны, отличные от RFC. Он даже не достаточно умен, чтобы обрабатывать даже RFC 822 , не говоря уже о RFC 5322. Однако это .

Если вы хотите получить фантазию и педантичность, реализовать полный механизм состояния . Регулярное выражение может действовать только как элементарный фильтр. Проблема с регулярными выражениями заключается в том, что кто-то говорит, что их совершенно корректный адрес электронной почты недействителен (ложный положительный результат), потому что ваше регулярное выражение не может справиться с этим, это просто грубо и невежливо с точки зрения пользователя. Механизм состояния для этой цели может как проверять, так и даже исправлять адреса электронной почты, которые в противном случае считались бы недействительными, поскольку он разбирает адрес электронной почты в соответствии с каждым RFC. Это позволяет потенциально более приятный опыт, например

Указанный адрес электронной почты 'myemail @ address, com' недействителен. Вы имели в виду «myemail@address.com»?

См. Также Проверка адресов электронной почты , включая комментарии. Или Сравнение адреса электронной почты Проверка регулярных выражений .

Debuggex Demo

6
задан Dukeling 29 May 2014 в 23:38
поделиться

4 ответа

Вы можете использовать пакет xts, который позаботится о вас для деталей (например, даже если серия имеет пробел)

library(xts)
ts1<-as.xts(ts(c(1:12),star=c(2014,1),freq=12))
ts2<-as.xts(ts(c(13:24),star=c(2015,1),freq=12))
str(ts3 <- c(ts1, ts2))
# An ‘xts’ object on Jan 2014/Dec 2015 containing:
# Data: int [1:24, 1] 1 2 3 4 5 6 7 8 9 10 ...
# Indexed by objects of class: [yearmon] TZ: 
# xts Attributes:
# NULL

Cheers, Peter

2
ответ дан Pete Baker 27 August 2018 в 22:41
поделиться

Вам нужно переназначить атрибуты из первой серии.

> ts(c(ts1,ts2), start=start(ts1), frequency=frequency(ts1))
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2014   1   2   3   4   5   6   7   8   9  10  11  12
2015  13  14  15  16  17  18  19  20  21  22  23  24
3
ответ дан 42- 27 August 2018 в 22:41
поделиться

Я думаю, что вы ищете что-то вроде

comb <- ts.union(ts1, ts2)
pmin(comb[,1], comb[,2], na.rm = TRUE)
#     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#2014   1   2   3   4   5   6   7   8   9  10  11  12
#2015  13  14  15  16  17  18  19  20  21  22  23  24
5
ответ дан Anders Ellern Bilgrau 27 August 2018 в 22:41
поделиться

Это сработало для меня

ts.union(ts1, ts2)
             ts1 ts2
    Jan 2014   1  NA
    Feb 2014   2  NA
    Mar 2014   3  NA
    Apr 2014   4  NA
    May 2014   5  NA
    Jun 2014   6  NA
    Jul 2014   7  NA
    Aug 2014   8  NA
    Sep 2014   9  NA
    Oct 2014  10  NA
    Nov 2014  11  NA
    Dec 2014  12  NA
    Jan 2015  NA  13
    Feb 2015  NA  14
    Mar 2015  NA  15
    Apr 2015  NA  16
    May 2015  NA  17
    Jun 2015  NA  18
    Jul 2015  NA  19
    Aug 2015  NA  20
    Sep 2015  NA  21
    Oct 2015  NA  22
    Nov 2015  NA  23
    Dec 2015  NA  24
1
ответ дан polka 27 August 2018 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: