2011-06-29 12 views
1

これは私の質問が正しく尋ねられたことを願っています。私は書き込み/ユーザーは、いくつかのテキストを追加し、少しタイムスタンプを設定することを可能にする機能を追加していC#Regex Replace特定の文字列を無視する

car accident 
people died 
cat without owner 


<!-- Text added at 6/29/2011 9:20:38 AM --> 

Some addintional Text 
other Text added 
add Text 

Basiclyは、私のような、任意のテキストが含まれている通常の.txtファイルを持っています。

私の問題は:別の機能では、テキストファイル内のテキストを検索して置き換えることができますが、誰かが "Text"という単語を置き換えるかどうかを推測できるので、xml-stylishというコメント(タイムスタンプ) 同じように。今まで

私の結果は

content = Regex.Replace(content,"[^<+.*"+input+".*>+]*", replace); 
//content = content of the .txt file, input = search term, replace = string to replace 

である。しかし、いくつかの正規表現のプロのは、それを実行せずに見るように、これは、無残に失敗します。

ここで私がここで助けてくれることを願って、通常のテキストを置き換えてもタイムスタンプを無視する検索パターンを提供してくれることを願っています。

私は今まで正規表現のロジックを本当に認識していませんが、正規表現をより適切に理解するためには単一の表現を理解する必要があります。

アドバイスありがとうございます。

+2

正規表現を@stemaするための柔軟性のおかげを追加する更新: '[^ <+.*BAR.*> +] *'マッチする任意の文字を_除きます_ ' '<''、 ' '+''、 ' '、' ''、 ''、 ''、 ''、 ''、 ''、この正規表現は常に2文字の間で一致することに注意してください(文字列を空にします!)。 regex、IMOを続行する前に少し読んでみてください。http://www.regular-expressions.info/charclass.htmlとhttp://www.regular-expressions.info –

+0

私はそれらをトグルしてくれてありがとう –

+0

申し訳ありませんが、_は2つの文字の間で一致します。 "_は間違っています。 –

答えて

1

私があなたの質問を正しく理解していれば、コメント内のもの以外の "テキスト"のすべてのインスタンスを置き換えたいと思っています。

easist方法は以下のように否定後読み(幻想説明here)を使用することです:

content = Regex.Replace(content, @"(?<!<!--.*?)" + input, replace); 

何が<されていない文字の任意の長さの繰り返しを交換しようとしているやっています+ 。*>またはreplaceの値を持つinputに含まれる文字。

Regexで多くの作業をしている場合は、上記のウェブサイトを上手に読むことを強くおすすめします。それは、私が見つけたRegexの最高のイントロを手に入れています。時間を費やすことで、後で頭痛の種を救うことができます!

編集

+0

私は助けてくれてありがとう、ありがとう、と私は、正規表現のチュートリアル(リンクのおかげで)を読んで続けます。 –

+0

問題ありません...幸せなコーディング! –

+0

@Matthias R.、これは負のlookbehindの最後に '\ s +'があるため、 "Text"を置き換えたい場合にのみ機能します。これは '<! - 'と検索された単語の間の空白だけを許します。より柔軟にしたい場合は '。*? 'で置き換えてください。したがって、「@」(?<!<! - !*?) "はより柔軟です。しかし、とにかく+1 to @elmugrat – stema

関連する問題