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次。为什么?我不使用+或?
答案 0 :(得分:2)
与上一主题一样,它会进入city_country
组。尝试将(?<city_country>.+)
替换为(?<city_country>[^.]+)
。除了.
之外,它将匹配所有内容。我猜你的city_country
里面没有点?
答案 1 :(得分:1)
。 (点)匹配Regex中的任何空格甚至空格导致问题
所以你的比赛是:
@"(?<city_country>.+):Agadir ca.
(cca|ca.|ungefähr): ca.
(?<price>[\d.,]+) (eur)?:600 eur
您需要使用点匹配城市名称,例如:
@"(?<city_country>[a-zA-Z]+) (cca|ca.|ungefähr) (?<price>[\d.,]+) (eur)?"