Regex take numbers from string c#

extract decimal number from string c
how to get only numeric values from string c#
split string into numbers and letters c#
c# regex
c# regex extract string
c# remove numbers from string
string to int c#
c# find last number in string

I want to split the string coordinates this type -54°32'17,420" to list with each number, like [54,32,17,420]. I am using

var longitudeSplitted = Regex.Split(longitutdeString, @"\D+")
    .Where(s => !string.IsNullOrWhiteSpace(s))
    .Distinct()
    .Select(int.Parse)
    .ToList();

and it works in general, but the problem showed up when I have the coordinate like this

-11°42'42,420" In this case, Im receiving the list with only 3 numbers [11,42,420]. Where is the problem? I dont really understand this behaviour.

This works:

   var numRegex = new Regex(@"[\+\-0-9]+");
   var numMatches = numRegex.Matches("-11°42'43,440");

I kept the +/- in the string (to distinguish east from west) and I changed the numbers to something more unique. You end up with 4 strings in numMatches.Items, each of which is parsable into an int. It worked with "-11°42'42,420" as well, but I wanted to test it with unique numbers as well

To acquire the numbers, we use the format string @"\D+" in the Regex. Split method. Pattern: The pattern "\D+" indicates that we want to use any number of one or more non-digit characters as a delimiter. I need to use Regex.Replace to remove all numbers and signs from a string. Example input: 123- abcd33 Example output: abcd

Here is a helper method that you can use

private static List<int> ExtratctCordinates(string input)
{
    List<int> retObj = new List<int>();
    if(!string.IsNullOrEmpty(input))
    {
        int tempHolder;
        // Use below foreach with simple regex if you want sign insensetive data
        //foreach (Match match in new Regex(@"[\d]+").Matches(input))

        foreach (Match match in new Regex(@"[0-9\+\-]+").Matches(input))
        {
            if (int.TryParse(match.Value, out tempHolder))
            {
                retObj.Add(tempHolder);
            }
        }
    }
    return retObj;          
}

Here is sample call

List<int> op = ExtratctCordinates("-54°32'17,420\"");

There's nothing specific to C# about that. Feel free to use String. Shame it can't take a string as a separator tho. Perhaps in This Regex find/replace pattern will remove all non-numbers from a given string. If you're already  C# Regex.Split, Get Numbers From String Pattern: The pattern "\D+" indicates that we want to use any number of one or more non-digit Using: Please notice how the System.Text.RegularExpressions namespace is included. Return: The Regex.Split method will return the numbers in string form. Info:

As was mentioned in the comments on the question, the problem was the call to Distinct().

The example I gave, "-11°42'42,420", contained the number 42 twice and one of those was thus removed by the call to Distinct().

The fixed expression would be this:

var longitudeSplitted = Regex.Split(longitutdeString, @"\D+")
    .Where(s => !string.IsNullOrWhiteSpace(s))
    .Select(int.Parse)
    .ToList();

Additionally, my original regex, @"\D+" failed to include the sign of negative numbers. I had to rewrite to using .Matches(...) instead of .Split(...) to include signs.

The correct expression would thus be this:

var longitudeSplitted = Regex.Matches(longitutdeString, @"[-+]?\d+").OfType<Match>()
    .Select(match => match.Value)
    .Where(s => !string.IsNullOrWhiteSpace(s))
    .Select(int.Parse)
    .ToList();

Regular expression lets you to do some of the tasks quickly in C# and now such of the task that can be done using the Regex class is to extract  I am trying to extract numbers from my string using the following code: var mat = Regex.Match(stringValue, @"\d+").Value; But when stringValue contains a decimal like "($23.01)", It only extracts 23 instead of 23.01.

Regular expressions give Tim Patrick the creeps, but he overcame his and extract named data elements from text strings using specially crafted private class PhoneParts { public string AreaCode; // First 3 digits NET development -- Start-to-Finish Visual C# 2015, and Start-to-Finish Visual Basic 2015  Regex.Split can extract numbers from strings. You get all the numbers that are found in a string. string input = "There are 4 numbers in this string: 40, 30, and 10."; // Split on one or more non-digit characters. string[] numbers = Regex.Split(input, @"\D+"); foreach (string value in numbers) { if (!string.IsNullOrEmpty(value)) { int i = int.Parse(value); Console.WriteLine("Number: {0}", i); } }

Approach: The idea is to use Python re library to extract the sub-strings from the given string which match the pattern [0-9]+. This pattern will extract all the  Regex Match for Number Range. Now about numeric ranges and their regular expressions code with meaning. Usually a word boundary is used before and after number \b or ^ $ characters are used for start or end of string. Regex for range 0-9. To match numeric range of 0-9 i.e any number from 0 to 9 the regex is simple /[0-9]/ Regex for 1 to 9

WriteLine("Parsing string '123as456'\n");. 12. Stopwatch sw = new Stopwatch();. 13. sw.Start();. 14. //regex get all numbers. 15. Console.WriteLine(string. A common requirement is extracting a number from a string. We can do this with Regex.Match. To get further numbers, consider Matches() or NextMatch. Digits: We extract a group of digit characters and access the Value string representation of that number.

Comments
  • Remove Distinct.
  • OMG, of course! Thank You :)
  • "-11°42'42,420\"".Split("°',.\"".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) then you get to keep the +/- (also included the period for cultures that use the period as the decimal separator)
  • From goscamp: As @juharr wrote, the Distinct is unnecessary:)
  • @PanagiotisKanavos I fail to see why that is not the answer to this question. Sure, it was lacking a bit in detail and shouldn't be written as a comment but that is actually the answer to this question. Remove the call to Distinct().
  • This is really a comment, not an answer. With a bit more rep, you will be able to post comments. For the moment I've added the comment for you, and I'm flagging this post for deletion.