senzacionale
senzacionale

Reputation: 20936

regex problem C#

const string strRegex = @"(?<city_country>.+) (cca|ca.|ungefähr) (?<price>[\d.,]+) (eur)?";
            searchQuery = RemoveSpacesFromString(searchQuery);
            Regex regex = new Regex(strRegex, RegexOptions.IgnoreCase);

            Match m = regex.Match(searchQuery);
            ComplexAdvertismentsQuery query = new ComplexAdvertismentsQuery();

            if (m.Success)
            {
                query.CityOrAreaName = m.Groups["city_country"].Value;
                query.CountryName = m.Groups["city_country"].Value;
                query.Price = Convert.ToDecimal(m.Groups["price"].Value);
            }
            else
                return null;

ca. must be for example only 1 times but the word "Agadir ca. ca. 600 eur" is also correct even if "ca." is 2 times. Why? i do not use + or ?

Upvotes: 0

Views: 67

Answers (2)

Pop Catalin
Pop Catalin

Reputation: 62990

. (Dot) Mathes anything in Regex even spaces which leads to the problem

So your matches are:

  1. @"(?<city_country>.+):Agadir ca.
  2. (cca|ca.|ungefähr): ca.
  3. (?<price>[\d.,]+) (eur)?:600 eur

You need to match the city name withouth using the dot, for example something like:

@"(?<city_country>[a-zA-Z]+) (cca|ca.|ungefähr) (?<price>[\d.,]+) (eur)?"

Upvotes: 1

Ivan Danilov
Ivan Danilov

Reputation: 14787

As with previous topic it gets into city_country group. Try to replace (?<city_country>.+) with (?<city_country>[^.]+). It will match everything except .. I guess your city_country couldn't have dots inside?

Upvotes: 2

Related Questions