如何替換具有潛在未知起始索引的字符串的一部分。舉例來說,如果我有以下字符串:C#替換部分字符串
"<sometexthere width='200'>"
"<sometexthere tile='test' width='345'>"
我會尋找替代,可以有一個未知值和未知的開始索引之前提到的寬度attibute值。
我明白,我將不知何故必須將此基於以下部分,這是恆定的,我只是不太明白如何實現這一點。
width='
如何替換具有潛在未知起始索引的字符串的一部分。舉例來說,如果我有以下字符串:C#替換部分字符串
"<sometexthere width='200'>"
"<sometexthere tile='test' width='345'>"
我會尋找替代,可以有一個未知值和未知的開始索引之前提到的寬度attibute值。
我明白,我將不知何故必須將此基於以下部分,這是恆定的,我只是不太明白如何實現這一點。
width='
using System.Text.RegularExpressions;
Regex reg = new Regex(@"width='\d*'");
string newString = reg.Replace(oldString,"width='325'");
這將返回一個新寬度的字符串,只要您在新寬度字段中的「'之間放置一個數字即可。
乾淨的解決方案Jetti,謝謝你。 +1 – 2012-03-07 21:20:44
@RyanSmith很高興能幫到你! – Jetti 2012-03-07 21:27:17
看看在Regex類,你可以搜索屬性的內容和repalce這一類的價值。
即興Regex.Replace可能做的伎倆:
var newString = Regex.Replace(@".*width='\d'",string.Foramt("width='{0}'",newValue));
請參閱:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Khan 2012-03-07 21:09:20
您可以使用正則表達式(正則表達式)來查找和替換後在單引號中的所有文本「WIDTH =」。
你可以使用正則表達式,像(?<=width=')(\d+)
例子:
var replaced = Regex.Replace("<sometexthere width='200'>", "(?<=width=')(\\d+)", "123");"
replaced
現在是:<sometexthere width='123'>
使用正則表達式來實現這一目標:
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');
假設寬度屬性始終是數值。不一定是有效的假設。 – 2012-03-07 21:13:05
我會使用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}");
使用正則表達式
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...
希望這有助於。
爲什麼*一個*空格字符? ** XML允許無限空白**。 – 2012-03-07 21:49:52
修正 - 我不知道爲什麼我這樣做:]。謝謝。 – MoonKnight 2012-03-08 00:37:16
到目前爲止,你有七個答案,告訴你做錯了什麼。 請勿使用正則表達式來完成解析器的工作。我假設你的字符串是標記的大塊。假設它是HTML。什麼是你的正則表達式也有:
<html>
<script>
var width='100';
</script>
<blah width =
'200'>
... and so on ...
我願意打賭不亞於它所替代的JScript代碼,一塊錢,它不應該,也不會取代嗒嗒標籤的屬性 - - 在屬性中有空格是完全合法的。
如果您必須解析標記語言,然後解析標記語言。給自己一個解析器並使用它;這就是解析器的用途。
+1。這個。 (更多人物) – Rob 2012-03-08 06:40:35
我很高興有人提到這個。當我讀到其他答案時,我想到了完全一樣的東西。 – 2012-03-10 19:44:09
這看起來像一個工作...... [正則表達式](http://www.regular-expressions.info/examples.html)! – jrummell 2012-03-07 21:08:28
+1找到創造性的方式來繞過「如何用RegEx解析HTML」和「我想用字符串操作解析和構造XML」的標準答案。 – 2012-03-07 21:17:20
@jrummell:這看起來像一個解析器的工作。這看起來不像正則表達式的工作。首先,正則表達式不考慮標記的語法,其次*迄今發佈的每個正則表達式都是錯誤的*。 – 2012-03-07 21:51:41