# How do I extract a number from a string?

I want to extract the number from an alphanumeric string. This is what I tried:

StringTake["thiru3", {6, 6}]


The result I got is 3, but it is still a String, which I determined by evaluating:

NumberQ[StringTake["thiru3", {6, 6}]]


which returns False.

 StringCases["thiru3", x : NumberString :> ToExpression[x]]
(* {3} *)
First[%]
(* 3 *)
(* {True, Integer} *)

• As noted by ssch in Chris's answer, FromDigits[] might be better to use than ToExpression[]. Apr 4, 2013 at 14:55
• NumberString will match real number strings and FromDigits will balk; ToExpression will convert them. I would say NumberString & ToExpression for real numbers, or, for integers only, DigitCharacter.. and FromDigits. You won't get messages in either case, as in ssch's comment, because FromDigits is called only when there is a match. Oct 16, 2013 at 12:09

Try to use ToExpression, like this

ToExpression[StringTake["thiru3", {6, 6}]]


If you check it with Head[%] it confirms that it is an Integer

Alternatively, and for multiple numbers:-

Map[FromDigits, Select[Characters["thiru37"], DigitQ]]


{3, 7}

Latterly

ToExpression@StringCases["thiru37", DigitCharacter]


{3, 7}

• I think FromDigits is the best way since you will immediatly get a message printed in case it didn't work, that you can Check for if need be
– ssch
Dec 22, 2012 at 19:23

Here is one compact option

InternalStringToDouble@"thiru3"


3.

• Nice - where the heck did you get that from? Oct 16, 2013 at 15:03
• Ahh.. I was looking for a faster way to make conversions from string to numbers, and found it here Oct 16, 2013 at 22:15

Like NumberString, DigitCharacter can be used to find numbers in a string. Use relative positioning in the string (like EndOfString) to localize your digits and ignore other numbers possibly appearing at other positions:

First@StringCases["0thi12ru3", (n:DigitCharacter~~EndOfString) :> ToExpression@n]

(* ==> 3 *)


This searches for exactly one number character right before the end of string. If the terminal number could have more than one digits, use DigitCharacter.. instead.

Consider:

str = "thiru37aa2er45"


then

StringCases[str, DigitCharacter ..]


yields:

{"37", "2", "45"}

StringCases[str, DigitCharacter .]


yields:

{"3", "7", "2", "4", "5"}


They can be converted to expressions using ToExpression

• StringCases["thiru37aa2er45", x : DigitCharacter .. :> FromDigits[x]] Oct 16, 2013 at 11:15
• @Mr.Wizard thank you...all in one step Oct 16, 2013 at 11:40
s = "thiru3";
r = First@StringCases[s, RegularExpression["\\d+"]];
InstallJava[];
z = IntegerparseInt[r]


• bbbut... why not ToExpression@r?
– rm -rf
Dec 22, 2012 at 23:07
• @rm-rf The sarcasm character doesn't display in your browser I guess. Dec 22, 2012 at 23:13
• wish I could upvote twice. what an economical solution
– acl
Dec 23, 2012 at 0:50

Can be so

ToExpression[StringCases["thiru3", DigitCharacter ..]][[1]]


or

ToExpression[
StringCases["thiru3", "thiru" ~~ (x : DigitCharacter ..) -> x]][[1]]


or

ToExpression[StringCases["thiru3", RegularExpression["\\d+"]][[1]]]


Try this.

Read[StringToStream[StringTake["thiru3", {6, 6}]]]
`