# Detect string arrays in Matrix{Any} and convert them to number

Consider there is an m×n Matrix{Any}: where some of its arrays are decimal numbers (Float64) and some of them are strings of this type a.b.c, in which a, b, and c are integer numbers (a,b,c>10). Now, how can we write a code in Julia to 1) find these strings; and 2) remove the second point and change them from string a.b.c to number a.bc?

``````m = [11.23 "22.33.444"; "333.44.5555" 4.56]

function parse_matrix(m)
map(parse_cell, m)
end

parse_cell(x :: Number) = x;

function parse_cell(x :: AbstractString)
idx = findlast(c -> c == '.', x);
return parse(Float64, x[1 : (idx-1)] * x[(idx+1) : end])
end

parse_matrix(m)

2×2 Matrix{Any}:
11.23             "22.33.444"
"333.44.5555"  4.56
``````

I have a feeling that I made the string indexing clunky / slow. There is probably a more efficient way of deleting the 2nd period from a string (using regex, most likely).

you could use one of these, but I don’t know if they are “better” than yours,

``````str="222.333.444"

reverse(replace(reverse(str),r"\." => "",count=1))

replace(str,r"\.(\d+)\$" => s"\1")
``````