2012-03-07 156 views
3

如何替換具有潛在未知起始索引的字符串的一部分。舉例來說,如果我有以下字符串:C#替換部分字符串

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

我會尋找替代,可以有一個未知值和未知的開始索引之前提到的寬度attibute值。

我明白,我將不知何故必須將此基於以下部分,這是恆定的,我只是不太明白如何實現這一點。

width=' 
+3

這看起來像一個工作...... [正則表達式](http://www.regular-expressions.info/examples.html)! – jrummell 2012-03-07 21:08:28

+3

+1找到創造性的方式來繞過「如何用RegEx解析HTML」和「我想用字符串操作解析和構造XML」的標準答案。 – 2012-03-07 21:17:20

+11

@jrummell:這看起來像一個解析器的工作。這看起來不像正則表達式的工作。首先,正則表達式不考慮標記的語法,其次*迄今發佈的每個正則表達式都是錯誤的*。 – 2012-03-07 21:51:41

回答

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

這將返回一個新寬度的字符串,只要您在新寬度字段中的「'之間放置一個數字即可。

+0

乾淨的解決方案Jetti,謝謝你。 +1 – 2012-03-07 21:20:44

+0

@RyanSmith很高興能幫到你! – Jetti 2012-03-07 21:27:17

4

看看在Regex類,你可以搜索屬性的內容和repalce這一類的價值。

即興Regex.Replace可能做的伎倆:

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 2012-03-07 21:09:20

0

您可以使用正則表達式(正則表達式)來查找和替換後在單引號中的所有文本「WIDTH =」。

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

假設寬度屬性始終是數值。不一定是有效的假設。 – 2012-03-07 21:13:05

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

使用正則表達式

Regex regex = new Regex(@"\b(width)\b\s*=\s*'d+'"); 

其中\b小號表明,要匹配整個字,\s*允許零或任意數量的空格charaters和\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允許無限空白**。 – 2012-03-07 21:49:52

+0

修正 - 我不知道爲什麼我這樣做:]。謝謝。 – MoonKnight 2012-03-08 00:37:16

35

到目前爲止,你有七個答案,告訴你做錯了什麼。 請勿使用正則表達式來完成解析器的工作。我假設你的字符串是標記的大塊。假設它是HTML。什麼是你的正則表達式也有:

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

我願意打賭不亞於它所替代的JScript代碼,一塊錢,它不應該,也不會取代嗒嗒標籤的屬性 - - 在屬性中有空格是完全合法的。

如果您必須解析標記語言,然後解析標記語言。給自己一個解析器並使用它;這就是解析器的用途。

+0

+1。這個。 (更多人物) – Rob 2012-03-08 06:40:35

+0

我很高興有人提到這個。當我讀到其他答案時,我想到了完全一樣的東西。 – 2012-03-10 19:44:09