5
C#正則表達式的變化替換字符串我有一個這樣的字符串:爲每場比賽
string s = "<p>Hello world, hello world</p>";
string[] terms = new string[] {"hello", "world"};
我想要做這個字符串替換使得每個字(不區分大小寫)都將匹配,並與更換一個編號索引跨度標籤,如下所示:
<p>
<span id="m_1">Hello</span>
<span id="m_2">world</span>,
<span id="m_3">hello</span>
<span id="m_4">world</span>!
</p>
我試過這樣做。
int match = 1;
Regex.Replace(s,
String.Join("|", String.Join("|", terms.OrderByDescending(s => s.Length)
.Select(Regex.Escape))),
String.Format("<span id=\"m_{0}\">$&</span>", match++),
RegexOptions.IgnoreCase);
輸出是這樣的:
<p>
<span id="m_1">Hello</span>
<span id="m_1">world</span>,
<span id="m_1">hello</span>
<span id="m_1">world</span>!
</p>
,所有的IDS都是一樣的(M -1),因爲正則表達式不爲每個匹配評估匹配++,而是一個整個正則表達式。我如何解決這個問題?
可能更容易解析HTML和迭代跨越節點,看看:http://stackoverflow.com/questions/6063203/parsing-html-with-c-net – ferflores
它是否必須是正則表達式?看起來像循環比較將是一個更簡單,更可讀的方法。 –
@ferflores我解析它,但輸入沒有跨度節點。這是所需的輸出和實際輸出。輸入是那裏的字符串。 – user3685285