正则表达式问题c#

本文关键字:问题 正则表达式 | 更新日期: 2023-09-27 18:03:30

 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)

而"Agadir ca. 600"是假的,而"Agadir ca. 600 eur"是真的。"eur"是可选的,但"Agadir ca. 600"是假的?为什么?

正则表达式问题c#

eur用圆括号括起来,如(eur)?

?匹配前一个字符 0次或1次。通过将其括在父括号中,它将匹配整个单词。

也可能匹配(eur)?前面的最后一个空格。试试这个:

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

注意,我删除了最后一个空白,并添加了's,它匹配任何空白,包括空格,制表符,form-feed等

我认为你应该写(eur)?而不是eur?。例如,将空格放在括号

之前
@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>['d.,]+)( eur)?"
OR
@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>['d.,]+)('seur)?"

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

最好的方法是CC_10将空格只放在里面,就像(eur)不匹配像"Agadir ca. 600"这样的东西