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)?
答案 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
第一个?
属于
第二个?
属于(bis|zu)
这两种情况下的?
使表达式在可选