2011-07-23 47 views
0
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”是假的?为什么?正则表达式问题C#

回答

1

括号中包括eur,就像(eur)?一样。

?匹配前面的字符零次或一次。通过将它放在主文件中,它将匹配整个单词。

此外,也许它匹配(eur)?之前的最后一个空间。试试这个:

@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)(\seur)?"

注意,我删除了最后的空白,并添加\s,它匹配任何空白,包括空格,制表符,换页等

+0

thx回答。或?(eur)?我对吗? – senzacionale

+0

我这么认为,但测试它会给你明确的答案。 :)即使我使用(eur), – Josh

0

我想你应该写(eur)?而不是eur?。即将空格也放入括号之前

+0

是一样的,即使我使用(EUR)? – senzacionale

+0

我修改了我的答案。把这个空间放在*之前,就像'(eur)?'一样。 –

0

使用(EUR)?而不是欧元?应该解决问题。

最好的办法是把@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)\s*(\seur)?")空间只有里面像(EUR)都将不匹配像“阿加迪尔长约600”

+0

也是一样吗? – senzacionale

+0

也许你可以试试eur?和(欧元)?,没有正则表达式的前一部分。 –

0
@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)(eur)?" 

OR 

@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)(\seur)?"