2011-10-20 16 views
1

Regex/c#を使用して以下をどのように達成できますか?私が持っているRegexを使用して文字列のデータパターンを変更する方法は?

入力文字列:

+0

RegExまたは交換用のサポートが必要ですか?これまでのコードを見せてください。 – RedFilter

+0

ちょっと詳細を見てください - 近くにあるが一致してはならないものは何ですか? –

+0

私が持っているのは、パターンにマッチする正規表現です。私が知っていることから、(私ができる)正規表現のパターンにマッチさせて別の文字列に置き換えることができますが、それをどうやって行うか、あるいは可能であれば、別のパターンに置き換える必要があります。 –

答えて

1

を:「テストデータ:((test param={p} value={v}))入力文字列が続く」私はあなたの本当の問題は、それを達成する方法であると仮定し、私は必要

出力文字列を:「テストデータ<test param="p" value="v"/>入力文字列が続きます」 、および要件はかなり剛性であるように思わ検索/置換、ここにあなたのケースのために働くものです:

Find:  ([^:]*): <([^=]*)="([^"])"([^=]*)="([^"])"/> 
Replace: $1: (($2={$3}$4={$5})) 

検索式は次のように分けることができます

([^:]*) # Capture zero or more characters that ARE NOT a colon 
: <  # Match a colon, a literal space, then a less-than sign 
([^=]*) # Capture zero or more characters that ARE NOT an equals sign 
="   # Match an equals sign, then a double quote 
([^"])  # Capture zero or more characters that ARE NOT a double quote 
"   # Match a double quote 
([^=]*) # Capture zero or more characters that ARE NOT an equals sign 
="   # Match an equals sign, then a double quote 
([^"])  # Capture zero or more characters that ARE NOT a double quote 
"/>  # Match a double quote, a forward slash, then a greater-than sign 

正規表現内の括弧()は、かっこの内容に一致する文字を「取得」することを意味します。カッコ内にないものはすべて「一致」しますが、検索および置換中に破棄されます。これは、name,attribute1およびvalue1<name attribute1="value1"/>から抽出して別のパターンのテキストにするようなパターンからデータのビットを抽出する場合に便利です。

C#では、System.Text.RegularExpressions.Regexオブジェクトを使用して、正規表現を使用して一致または置換します。 Iは、(正規表現オブジェクトのインスタンス用)構文/署名が括弧()で囲まれたマッチの部分を指すregexObject.Replace(input As String, replacement As String) As String

交換式は$1が含まれ、$2、等であると考えています。したがって、$1(交換式の)(一致式から)最初のグループ([^:]*)によりマッチしたテキストを挿入する

この組み合わせは、このテキストを向けるだろう。

「試験データ:<試験PARAM = "p" value = "v"/> "続きを読む何とか何とか何とか "テストデータ:<テストのparam =" P "値= "V"/ >" とし、いくつかのより多くのテキスト...このテキストに

「テストデータ: ((test param = {p} value = {v})) "more text。何とか何とか何とか「テストデータ:((テストのparam = {P}値= {V}))」とし、いくつかのより多くのテキスト...

偉大な正規表現について学ぶためのリソース(と私はについて学びました私が知っているものの90%)はRegular-Expressions.infoであり、RegexBuddyという関連ツールは正規表現の構築、テスト、デバッグにも最適です。

+0

正しく動作します。どのように([^:] *):置き換え作業のFindと$ 1の部分で説明できますか? –

+0

3番目の段落の '$ 1'について説明しようとしましたが('置換式には...が含まれています ')、それが明確でないか、何かが欠けているかどうかはわかりません。正規表現の内部を深く掘り下げることなく、他に何が追加できるのか分かりません:Dか、マッチパート '([^:] *):'についてもっと質問していますか? –

+0

$ 1の隣にあるコロンは、正規表現と同じですか?そしてはい、何か([^:] *):意味します。申し訳ありませんが、私の正規表現のスキルはかなり弱いです。別々に各部分を照合しているのであれば、なぜ最初に([^:] *):が必要ですか?それは私を混乱させている。 –

関連する問題