2012-01-03 16 views
3

次の文字列にないオペレータ

1080s: 33, 6&apos;2&quot; meg: test. 1748s: I THINK IM GONNA <span class="highlight" >PICK</span> 1749s: TWO COMPLETE OPPOSITES. 

を考えると、私はASPで、次の正規表現を使用しています

1st match : 1080s: 33, 6&apos;2&quot; meg: test. 
2nd match : 1748s: I THINK IM GONNA <span class="highlight" >PICK</span> 
3rd match : 1749s: TWO COMPLETE OPPOSITES. 

をそれに正規表現の操作をしたいし、次の試合をしたいです。 NETを使用して一致を実行する

MatchCollection mcs = Regex.Matches(txtData, "(\\d*)(s:)([^(\\d*)](s:){0})*"); 

正規表現は一致しますが、キャプチャが正しくありません。正規表現は、\d*またはs:を見つけるとすぐにテキストをスキップします。 \d*s:が一緒に見つかった場合にのみスキップします。

私はいくつかの方法で試してみましたが、まだ演算子に\d*s:の両方を組み合わせる方法が見つかりませんでした。

答えて

2

あなたは@Ilyaにより示唆されるように

var pattern = @"\b(?=\s*\d{0,4}s:)"; 
var lines = new Regex(pattern).Split(input).Where(
    s => 
    string.IsNullOrEmpty(s.Trim()) == false).ToArray(); 

説明
\b(?=\s*\d{0,4}s:)regex positive lookaheadを使用することができます - >ワード境界で開始し、マッチ接尾辞が、キャプチャから除外します。サフィックスは、「任意の数の空白文字の後ろに長さ0〜4の数字が続き、その後にsが続き、次に:が続きます。
入力が分割されたら、入力を消去して空のエントリを削除します。

+0

ありがとうDevendra ..それはかなり良い仕事..ちょうど1つの問題があります。 sの前の私の数値的単語は、0〜4文字の長さにすることができます..必ずしも4文字であるとは限りません。長い... 私はそれに下の変更を適用しました... @ "(?= \ s * \ d {1,4} s :)"と@ "(?= \ s * \ d * s :) " しかし、それは私が必要とする正確な結果を返しません..これで私を助けることができますか? – meghana

+0

@ meghana、私は0-4桁を許可する正規表現を更新しました –

+0

ちょっと感謝devendra ..私は間違いなくこれを試してください:) – meghana

4

正規表現エンジンの末尾には、一致の直後に(\\d*)(s:)または文字列の終わりが必要です。これは、先読みを使用して行うことができます。

+0

thansk llya ...私は本当に助けてくれました。 – meghana

3

あなたが桁の任意の番号(だけではなく、正確に4)と一致する場合は、このコードを使用してそれを行うことができます。

var pattern = @".+?(?<!\d)((?=\d+s:)|$)"; 
var matches = Regex.Matches(input, pattern); 

.+?は、少なくとも1文字の非欲張り試合です。これは貪欲でなければならず、そうでなければ.+は、\d+s:の出現をスキップして全体の文字列と一致します。

(?<!\d).にマッチした最後の文字が数字ではないことを保証否定後読みです。これは、桁数が4と固定されていないために必要です。この見解が含まれていない場合、入力 'X12'はany, digit, digitまたはany, any, digitのいずれかと一致します。 2回目の試合を避けて、1digitと一致し、anyではないことを確認するには、見た目が必要です。

((?=\d+s:)|$)は一致がs:続いてのいずれか、いくつかの数字で終わることを確実にする、または単にストリング($)の端部である肯定先読みあります。この先読みはアサーションであり、マッチには含まれていないことに注意してください。これは、マッチの後に先読みが続くことを保証するだけです。

+0

ちょっと....マーティン、ありがとうたくさん... – meghana