Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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

>Solution :

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

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading