正则表达式问题C#

时间:2011-07-22 20:28:26

标签: c# regex

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。必须例如只有1次,但“阿加迪尔约600欧元”这个词也是正确的,即使“ca.”是2次。为什么?我不使用+或?

2 个答案:

答案 0 :(得分:2)

与上一主题一样,它会进入city_country组。尝试将(?<city_country>.+)替换为(?<city_country>[^.]+)。除了.之外,它将匹配所有内容。我猜你的city_country里面没有点?

答案 1 :(得分:1)

。 (点)匹配Regex中的任何空格甚至空格导致问题

所以你的比赛是:

  1. @"(?<city_country>.+):Agadir ca.
  2. (cca|ca.|ungefähr): ca.
  3. (?<price>[\d.,]+) (eur)?:600 eur
  4. 您需要使用点匹配城市名称,例如:

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