正则表达式问题C#

时间:2011-07-23 05:51:31

标签: c# regex

 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”是假的吗?为什么呢?

4 个答案:

答案 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)?"