Найти строки начинаются с альфы, за исключением нескольких специфических символов - PullRequest
0 голосов
/ 05 ноября 2018

Цель найти 1-й и 2-й элементы, которые начинаются с альфы, кроме "H" или "G" **

DD <- c("DD2123","QD2123","HC12231","HCEF","GC2123","1232","--",NA)

grepl("^[[:alpha:]][^H|G]",DD)

Найдено все начинается с альфа, включая "H" и "G".

Как мне этого добиться?

grepl("^D|Q",DD) не то, что мне нужно, фактические данные имеют другие альфа-шаблоны.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Так же, как альтернатива. Решение Wiktors является более общим и практичным.

grepl("^[a-zA-FI-Z][0-9a-zA-Z]+$",DD)

Вы можете определить класс значений, которые могут появляться на первом месте, а затем определить следующие позиции.


Если все остальное разрешено, просто используйте:

grepl("^[a-zA-FI-Z]",DD)
0 голосов
/ 05 ноября 2018

Вы можете использовать регулярное выражение PCRE, например ^(?![HG])\p{L} или ^(?![HG])[[:alpha:]]:

> DD <- c("DD2123","QD2123","HC12231","HCEF","GC2123","1232","--",NA)
> grepl("^(?![HG])\\p{L}",DD, perl=TRUE)
[1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

или ^[^\\P{L}HG]:

> grepl("^[^\\P{L}HG]",DD, perl=TRUE)
[1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

Шаблон ^(?![HG])[[:alpha:]] соответствует

  • ^ - начало строки
  • (?![HG]) - нет H или G допускается сразу справа от текущего местоположения
  • [[:alpha:]] или \p{L} - буква.

^[^\P{L}HG] соответствует началу строки (^), а затем соответствует любому символу, кроме не-буквы, H и G.

...