2011-07-23 84 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)?"