正则表达式问题c#

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

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次,但单词"Agadir ca. ca. 600 eur"也是正确的,即使"ca."是2次。为什么?我不使用+或?

正则表达式问题c#

与前一个主题一样,它进入city_country组。尝试用(?<city_country>[^.]+)代替(?<city_country>.+)。除了.,其他都可以匹配。我猜你的city_country里面不能有点吧?

。(Dot)计算Regex中的任何内容,甚至是导致问题的空格

所以你的匹配是:

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

您需要匹配不使用点的城市名称,例如:

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