ここに 1 つの可能性があります。単一引用符の間の内容を XML として認識しようとする正規表現です。これは完璧な正規表現ではありません。使用しても問題ないかどうかは、要件によって異なります。正規表現が正確でなければならないほど、読み取りが難しくなります。このままでは、この式はすべての XML に一致するわけではなく、一部の無効な XML にも一致します。
たとえば、この正規表現は、数字で始まる名前のタグに一致します。また、XML の終了タグと属性も一致します。必要に応じて微調整できます。
ここにあります:
push\s+'\s*<(\w+)(?:\s+\w+=(?:"[^"]*"|'[^']*'))*>(?:[^<]+|(?!</\1>)</?\w+(?:\s+\w+=(?:"[^"]*"|'[^']*'))*\s*/?>)*</\1>\s*'
表現の内訳はこちら。push ステートメントの開始:
push\s+'\s*
ルート XML タグを検出し、その名前を取得します。一重引用符と二重引用符で区切られた属性を許可します。:
<(\w+)(?:\s+\w+=(?:"[^"]*"|'[^']*'))*>
ルート タグ内のすべての内部タグとテキスト要素をループします。一重引用符と二重引用符で区切られた属性を許可します。
(?:[^<]+|(?!</\1>)</?\w+(?:\s+\w+=(?:"[^"]*"|'[^']*'))*\s*/?>)*
終了ルート タグをキャプチャします。
</\1>\s*'
また、単純にプッシュ コマンドをキャプチャして、このソリューションのように関数を介してそれらの値を実行することもできます:
How to check for valid xml in string input before calling .LoadXml()