2012-03-07 14 views
3

どのように私は潜在的に未知の開始インデックスを持つ文字列の一部を置き換えることができるの一部を交換してください。たとえば、場合、私は以下の文字列を持っていた:C#の文字列

"<sometexthere width='200'>" 
"<sometexthere tile='test' width='345'>" 

私は未知の値を持ち、未知の開始インデックス前に述べたようにすることができます幅attibute値を置き換えるために探していることになります。

のIは、私はちょうど、非常にこれを達成する方法を理解していない、私は何とか一定である、以下の部分でこれをベースにしなければならないことを理解しています。

width=' 
+3

これは仕事のようです... [正規表現](http://www.regular-expressions.info/examples.html)! – jrummell

+3

+1 "RegExでHTMLを解析する方法"と "文字列操作でXMLを解析して構築したい"という標準的な回答をバイパスする独創的な方法を見つけるためです。 –

+11

@jrummell:これはパーサの仕事のようです。これは正規表現の仕事のようには見えません。まず、正規表現はマークアップの文法を考慮せず、2番目の*ここまでの正規表現は間違っています*。 –

答えて

2
using System.Text.RegularExpressions; 
Regex reg = new Regex(@"width='\d*'"); 
string newString = reg.Replace(oldString,"width='325'"); 

これは、新しい幅の新しい文字列を返します。ただし、新しい幅のフィールドの間に数字を置く必要があります。

+0

すてきなクリーンなソリューションJetti、ありがとう。 +1 –

+0

@ RyanSmith Glad私は助けることができました! – Jetti

4

は、属性の内容を検索し、このクラスで値をrepalceすることができ、Regexクラスを見てみましょう。

var newString = Regex.Replace(@".*width='\d'",string.Foramt("width='{0}'",newValue)); 
+6

参照してください:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Khan

0

あなたは「幅=」の後に単一引用符内のすべてのテキストを検索と置換する正規表現(regex)を使用することができます:カフRegex.Replaceオフ

は、トリックを行う可能性があります。

0

あなたは(?<=width=')(\d+)

例のように、正規表現を使用することができます。

var replaced = Regex.Replace("<sometexthere width='200'>", "(?<=width=')(\\d+)", "123");" 

replacedは以下のようになります。これを達成する<sometexthere width='123'>

0

使用正規表現:

using System.Text.RegularExpressions; 

... 

string yourString = "<sometexthere width='200'>"; 

// updates width value to 300 
yourString = Regex.Replace(yourString , "width='[^']+'", width='300'); 

// replaces width value with height value of 450 
yourString = Regex.Replace(yourString , "width='[^']+'", height='450'); 
+0

width属性が常に数値であると仮定します。必ずしも有効な仮定ではありません。 –

0

私はRegexを使用します。
幅の値を123456に置き換えると、次のようになります。

string aString = "<sometexthere tile='test' width='345'>"; 
Regex regex = new Regex("(?<part1>.*width=')(?<part2>\\d+)(?<part3>'.*)"); 
var replacedString = regex.Replace(aString, "${part1}123456${part3}"); 
2

正規表現

\b sが \s*がゼロを可能にしたり、空白charatersと \d+の任意の数が1以上の数値を可能にし、あなたが単語全体にマッチしたいことを示している
Regex regex = new Regex(@"\b(width)\b\s*=\s*'d+'"); 

を使用しますプレースホルダ。数値を置き換えるには、

int nRepValue = 400; 
string strYourXML = "<sometexthere width='200'>"; 

// Does the string contain the width? 
string strNewString = String.Empty; 
Match match = regex.Match(strYourXML); 
if (match.Success) 
    strNewString = 
     regex.Replace(strYourXML, String.Format("match='{0}'", nRepValue.ToString())); 
else 
    // Do something else... 

希望があります。

+0

なぜ* * *空白文字ですか? ** XMLは無制限の空白を許します**。 –

+0

改正 - なぜ私はそれをしたのか分かりません:]。ありがとう。 – MoonKnight

35

は、これまでのところ、あなたは間違ったことをやって、あなたを伝える7つの答えを持っています。 正規表現を使用してパーサーの仕事をしないでください。私はあなたの文字列がマークアップの塊であると仮定しています。それがHTMLだとしましょう。あなたの正規表現がで何をするのか:

<html> 
<script> 
    var width='100'; 
</script> 
<blah width = 
       '200'> 
... and so on ... 

私はそれがないはずである、それはJScriptコードを置き換えるドルほどに賭けることをいとわないだろう、と何とかタグの属性に代わるものではありません - 属性に空白を入れるのは完全に合法です。

マークアップ言語を解析する必要がある場合はマークアップ言語を解析します。あなた自身をパーサーにして使ってください。それはパーザーのためのものです。

+0

+1。この。 (複数キャラあわせ) – Rob

+0

誰かがこれを言いました。私はまったく同じことを考えました。私は他の答えを読んでいます。 –