正则表达式问题c#

本文关键字:问题 正则表达式 | 更新日期: 2023-09-27 18:03:04

 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欧元",但"ca."不是"bis"或"zu",正则表达式也是正确的。正则表达式有什么问题?我希望regex只有在单词"bis"或"zu"时才为真。

我认为这是错误的

?(bis|zu)?

正则表达式问题c#

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

看起来这是因为您将bis和zu设置为可选的。尝试将(bis|zu)?更改为(bis|zu)

去掉(bis|zu)?中的问号。就目前而言,<city_country>.+与价格匹配,并包括ca.

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

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

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

这两种情况下的?使得前面的表达式是可选的