2012-04-10 8 views
-1

私は、年の情報だけを文字列値として選択したいという内容の下に、次のような内容があります。数値難易度(Astromの原因になります例えば年情報を文字列値として取得する方法は?

、主要な問題の一つは、オブザーバーのダイナミクス は、状態フィードバックコントローラよりも速いことを想定しているということです、 :

この入力文字列を考えますWittenmark、1997)。 さらに、プロセス制約がアクティブになると、閉ループ制御パフォーマンスの大幅な低下は、 システム(Tenny、Rawlings、and Wright、2004)を支配していることが明らかになっています。したがって、上記の問題に取り組むことができる方法を開発することが必要である。

19972004を抽出したいと思います。

注:

  1. 年情報のみを4桁で発生し
  2. おそらくそれはそれは、段落内の任意の場所で発生することがあり終止符(ピリオド)または閉じ括弧
  3. で終わる
+2

"ほとんどの場合"は役に立ちません。それよりも決定的なものが必要です。 –

+0

@KshitijMehta +1。そして、4桁の数字のすべてが大括弧で終わっているわけではないかもしれませんが、実際は「年」です。 –

+0

私はこの正規表現を使用したいと思うでしょう... – Jack

答えて

0

さて、次の正規表現をお勧めします。 .NETで

((19|20)\d{2}) 

または

\b((19|20)\d{2})\b 

次はまた、パターンに一致する便利な方法ですので、名前付きグループのサポートもあります。

\b(?<Years>(19|20)\d{2})\b 

注:4桁の数字のために、この正規表現検索設定と最初の二つは19または20でなければなりません。 以前の年があることができれば、あなたは

\b(?<Years>(17|18|19|20)\d{2})\b 
+0

私は提供されたサンプルがちょうど...サンプルであると推測しています。あなたは、19または20で始まる年より包括的でなければなりません。 –

1
var years = Regex.Matches(input, @"\D(\d{4})\D") 
    .Cast<Match>() 
    .Select(m => m.Groups[1].Value) 
    .ToArray(); 
0

それらを含めることができ何ら限定されるものではあなたの年はありますか?意味は、何も1900年より古い?または1800?これにより、少し正確になります。

Regex regex = new Regex(@" (19|20)\d\d\))") 

MatchCollection years = regex.Matches(your_input); 

私は思います)前のスペースを持っている1900年代や2000年代の任意の日付を、一致する、として終了しますregexで

これで、一致したすべてのインスタンスを取得してMatchCollectionを反復処理できます。

0

お試しください\d\d\d\d[\)\]\.]正規表現。

これは)または]または.で終わるすべての4桁の数字を検索します。

0

正規表現を使用することができます。 ^[12][0-9]{3}$のようなものはあなたの年を検証します。

Match match = Regex.Match(input, "^[12][0-9]{3}$"); 
+0

良いパターンですが、 '^'と '$'を取り除きます。文字列は4シンボルより長く、パターンは行のどの位置にあってもかまいません。さらに、OPは検証したくないので、彼は検索したい。 – Oybek

関連する問題