Wei Lin
Wei Lin

Reputation: 3811

Regex pattern "\{\{*Tag*\}\}" can't replace xml string

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);
}

enter image description here

I think * between {} can replace it, could friends give me idea about my mistakes, really appreciate!

Update2:

I tried to use \{\{.+Company_Name.+\}\} but it get full string between first {{ and last }}, online demo enter image description here

Upvotes: 0

Views: 47

Answers (2)

Quercus
Quercus

Reputation: 2065

Try this one: {{[^{}]*CreateDate[^{}]*}}

Upvotes: 1

Slack Groverglow
Slack Groverglow

Reputation: 856

My guess is there are two issues.

  1. You aren't matching "any character after {{". It should be .* instead of just *

  2. 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

Related Questions