Reputation: 3811
source xml string
<w:tc>
<w:tcPr>
<w:tcW w:w="1870" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="4A2404F3" w14:textId="6CC57F74" w:rsidR="00B721B4" w:rsidRDefault="00B721B4">
<w:r>
<w:t>{{</w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r>
<w:t>CreateDate</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r>
<w:t>}}</w:t>
</w:r>
</w:p>
</w:tc>
expect
<w:r>
<w:t>2022-09-20</w:t>
</w:r>
I tried to use below regex and C# code to replace but it did not work.online demo
void Main()
{
var input = @"<w:r>
<w:t>{{</w:t>
</w:r>
<w:proofErr w:type=""spellStart""/>
<w:r>
<w:t>CreateDate</w:t>
</w:r>
<w:proofErr w:type=""spellEnd""/>
<w:r>
<w:t>}}</w:t>
</w:r>";
var pattern = @"\{\{*CreateDate*\}\}";
var output = Regex.Replace(input,pattern,"2022-09-20");
Console.WriteLine(output);
}
I think *
between {}
can replace it, could friends give me idea about my mistakes, really appreciate!
I tried to use \{\{.+Company_Name.+\}\}
but it get full string between first {{
and last }}
, online demo
Upvotes: 0
Views: 47
Reputation: 856
My guess is there are two issues.
You aren't matching "any character after {{". It should be .*
instead of just *
I think you aren't matching multi-line. You'll need specify the match for newline
as well: (.|\n)*
instead of .*
Giving you the regex string:
\{\{(.|\n)*CreateDate(.|\n)*\}\}
You might be able to use a simpler regex \{\{.*CreateDate.*\}\}
by setting RegexOptions.Multline
Upvotes: 1