SKatie
SKatie

Reputation: 45

10 digit numbers starting with 4 or 6

In R I would like the code to find numbers starting with 4 or 6 in numbers with 10 digits.

This works to get the 10 digit numbers:

grep("^[[:digit:]]{10}$"

This doesn't work to get them starting with 4 or 6:

grep([46]\"^[[:digit:]]{10}$"

Examples

x <- c("4303669792", "6200406014")

Upvotes: 1

Views: 235

Answers (3)

Ronak Shah
Ronak Shah

Reputation: 389355

We can use grepl and nchar

grepl("^[4|6]", x) & nchar(x) == 10
#[1]  TRUE  TRUE FALSE FALSE

With grepl find if string starts with "4" or "6" and check if number of characters in it is equal to 10.

If you need the values, subset it

x[grepl("^[4|6]", x) & nchar(x) == 10]
#[1] "4982748923" "6165751984"

data

x <- c('4982748923', '6165751984', '31094583285', '654')

Upvotes: 1

Sotos
Sotos

Reputation: 51622

You can use simple math as well, i.e.

x <- c('4982748923', '6165751984', '31094583285')

as.numeric(x) %/% 1000000000 %in% c(4, 6)
#[1]  TRUE  TRUE FALSE

Upvotes: 1

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 627607

You may use

grep("^[46][0-9]{9}$", x)
       ^^^^      ^

Details

  • ^ - start of string
  • [46] - 4 or 6
  • [0-9]{9} - nine digits
  • $ - end of string.

See the regex demo and a Regulex graph:

enter image description here

Upvotes: 3

Related Questions