正则表达式问题C# 常量字符串stregex= @“(?[^.]+)(cca | ca.| ungefähr)(?[\d,]+)(欧元)”; searchQuery=RemoveSpacesFromString(searchQuery); Regex Regex=new Regex(strRegex,RegexOptions.IgnoreCase); Match m=regex.Match(searchQuery); ComplexAdvertismentsQuery query=new ComplexAdvertismentsQuery(); 如果(m.成功)

正则表达式问题C# 常量字符串stregex= @“(?[^.]+)(cca | ca.| ungefähr)(?[\d,]+)(欧元)”; searchQuery=RemoveSpacesFromString(searchQuery); Regex Regex=new Regex(strRegex,RegexOptions.IgnoreCase); Match m=regex.Match(searchQuery); ComplexAdvertismentsQuery query=new ComplexAdvertismentsQuery(); 如果(m.成功),c#,regex,C#,Regex,虽然“Agadir约600欧元”为假,但“Agadir约600欧元”为真。“eur”是可选的,但“Agadir ca.600”是假的?为什么?我认为你应该写(欧元)?而不是欧元?。也就是说,将空格也放在括号内将eur括在括号内,就像这样(eur)? ?与前面的字符零次或一次匹配。通过将其包含在括号中,它将匹配整个单词 此外,它可能与(eur)?之前的最后一个空格相匹配。试试这个: @“(?[^.]+)(cca | ca.| ungefähr)(?[\d,]+)(\seur)?” 请注意,我删除了

虽然“Agadir约600欧元”为假,但“Agadir约600欧元”为真。“eur”是可选的,但“Agadir ca.600”是假的?为什么?

我认为你应该写
(欧元)?
而不是
欧元?
。也就是说,将空格
也放在括号内

eur
括在括号内,就像这样
(eur)?

与前面的字符零次或一次匹配。通过将其包含在括号中,它将匹配整个单词

此外,它可能与
(eur)?
之前的最后一个空格相匹配。试试这个:

@“(?[^.]+)(cca | ca.| ungefähr)(?[\d,]+)(\seur)?”

请注意,我删除了最后一个空格并添加了
\s
,它匹配任何空格,包括空格、制表符、表单提要等。

使用(eur)?而不是欧元?应该解决这个问题

最好的方法是把空格放在里面,而不是像“Agadir ca.600”这样的东西 或 @“(?[^.]+)(cca | ca.| ungefähr)(?[\d,]+)(\seur)?”
即使我使用(欧元)也一样吗?也许你可以试试欧元?和(eur)?,没有正则表达式的前一部分。即使我使用(eur)?我修改了我的答案。将前面的空格也放在括号内,如
(eur)?
。我认为是这样,但测试它会给您确定的答案。:)
 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)
@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)( eur)?"

OR

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