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)
虽然“阿加迪尔约600”是假的,但“阿加迪尔约600欧元”是真的。 “eur”是可选的,但“Agadir ca. 600”是假的吗?为什么呢?
答案 0 :(得分:1)
将eur
括在括号中,如(eur)?
。
?
匹配前面的字符零或一次。通过将它包含在parens中,它将匹配整个单词。
此外,它可能匹配(eur)?
之前的最后一个空格。试试这个:
@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)(\seur)?"
注意,我删除了最后一个空格,并添加了\s
,它匹配任何空格,包括空格,制表符,换页符等。
答案 1 :(得分:0)
我认为你应该写(eur)?
而不是eur?
。即将空格放在括号内
答案 2 :(得分:0)
使用(欧元)?而不是欧元?应该解决问题。
最好的方式是@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)\s*(\seur)?")
只将空间放在里面,就像(欧元)那样不会像“阿加迪尔约600”那样匹配
答案 3 :(得分:0)
@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)( eur)?"
OR
@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)(\seur)?"