正则表达式问题C#

时间:2011-07-22 19:41:23

标签: c# regex

 const string strRegex = @"(?<city_country>.+) ?(bis|zu)? (?<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.CountryName = m.Groups["city_country"].Value;
                query.CityOrAreaName = m.Groups["city_country"].Value;
                query.PriceFrom = Convert.ToDecimal(1);
                query.PriceTo = Convert.ToDecimal(m.Groups["price"].Value);
            }
            else
                return null;

            return query;

我的搜索字符串是“Agadir ca. 600 eur”但是“ca.”不是“bis”或“zu”,正则表达式也是如此。正则表达式有什么问题?我希望正则表达式只有在单词“bis”或“zu”时才是真的。

我认为这很有意思

?(bis|zu)?

4 个答案:

答案 0 :(得分:3)

Agadir ca.成为您的city_country(bis|zu)?部分被跳过,因为?已将其标记为不需要。

答案 1 :(得分:2)

看起来是因为你选择了bis和zu。尝试将(bis|zu)?更改为(bis|zu)

答案 2 :(得分:1)

删除(bis|zu)?中的问号。就像现在一样,.+的{​​{1}}与价格相匹配,并且包含<city_country>

事实上,您可能希望将整个ca.部分更改为?(bis|zu)?

答案 3 :(得分:0)

(?<city_country>.+) ?(bis|zu)? (?<price>[\d.,]+) eur
                    ^        ^
                    1        2
  1. 第一个?属于

  2. 之前的空格
  3. 第二个?属于(bis|zu)

  4. 这两种情况下的?使表达式在可选

    之前