2011-07-23 15 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) 

「Agadir ca. 600」はfalseですが、「Agadir ca. 600 eur」は真です。 "eur"はオプションですが、 "Agadir ca. 600"はfalseですか?どうして?正規表現の問題C#

答えて

1

括弧の中にeurを入れてください。(eur)?のようにしてください。

?は、前述の文字と0回または1回一致します。それを括弧で囲むことによって、単語全体に一致します。

また、多分それは(eur)?前の最後のスペースに一致しています。これを試してみてください:

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

お知らせ(EUR)を使用して、など

+0

です。または?(eur)?私は正しい? – senzacionale

+0

私はそうだと思いますが、テストすることで決定的な答えが得られます。 :) – Josh

0

私はあなたが(eur)?代わりのeur?を書くべきだと思います。私。スペースもをかっこの中に入れてください。

+0

は私が(ユーロ)を使用している場合でも同じでしょうか? – senzacionale

+0

私は自分の答えを変更しました。また、 '(eur)?'のように括弧の前にスペースを入れる。答えは –

0

、私は最後の空白を削除し、スペース、タブ、フォームフィードなどの任意の空白にマッチした、\sを追加しましたか? eurの代わりに?問題を解決するはずです。

最良の方法は、唯一の内部の「アガディール約600」のようなものと一致しません(EUR)のようなスペースを入れ@"(?<city_country>[^.]+) (cca|ca.|ungefähr) (?<price>[\d.,]+)\s*(\seur)?")だろう

+0

は私が(eur)を使用しても同じですか? – senzacionale

+0

多分あなたはeurで試すことができますか?と(eur)?、正規表現の前の部分なし。 –

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

OR 

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