正则表达式问题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.成功)
虽然“Agadir约600欧元”为假,但“Agadir约600欧元”为真。“eur”是可选的,但“Agadir ca.600”是假的?为什么?我认为你应该写正则表达式问题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)?” 请注意,我删除了
(欧元)?
而不是欧元?
。也就是说,将空格
也放在括号内将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)?"