gpt4 book ai didi

c# - 识别占位符的正则表达式

转载 作者:行者123 更新时间:2023-11-30 20:09:14 29 4
gpt4 key购买 nike

我正在尝试用占位符内容构建的 html 元素替换文本文件中的占位符。

例如,我有一个占位符,例如 {Image, picture.jpg, Centre, Picture Info}

我想把它转换成:

<img src="urltopicture\picture.jpg" alt="Picture Info" class="quipImgCentre"></img>

我希望使用 Regex 来识别所有占位符,然后通过文档反向工作,依次转换和替换每个占位符。

正则表达式 {.*} 在一行中只有一个占位符的情况下有效,但如果超过一个则无效 - 在下面的文本中,它将作为一个长占位符返回,从第一个开始的“{”到最后一个“}”。

 Aenean non felis at est gravida tincidunt. {Link, news.bbc.co.uk, popup, 500, 800} Donec non diam a mauris vestibulum condimentum eu vitae mi! Aenean sed elit libero, id mollis felis! {Image, ServiceTile.jpg, Left}

另外 - 如果有人有更简洁的方法来执行此占位符替换,我很乐意听听。

最佳答案

为每个占位符重复此部分:

Regex PlaceholderExpander = new Regex(@"\{Image, ([^,]+), ([^,]+)(?:, ([^}]+))?\}");
string Expanded = PlaceholderExpander.Replace(YourHtmlStringWithPlaceholders, "<img src='$1' alt='$3' class='quipImg$2'></img>");

[^,] 表示“除 , 之外的任何字符”,因此在下一个 , 之前停止,尽管 greedy + 量词。这是一个 trick for processing speed 。一个更明显的替代方案是使用 lazy (a.k.a. ungreedy, reluctant) quantifier

(?:…) 是一个 non-capturing group - 它不能用类似 $3 的东西进行反向引用。我用它来包含属于可选最后一个参数的部分 - 它与最后一个 ? 一起成为可选参数。

我现在把最后一个参数设为可选,所以它同时支持

{Image, picture.jpg, Centre, Picture Info}

{Image, ServiceTile.jpg, Left}

后者导致

<img src='ServiceTile.jpg' alt='' class='quipImgLeft'></img>

我已经在 http://rextester.com/rundotnet 中用这段代码测试了这个:

string YourHtmlStringWithPlaceholders = "Aenean {Image, picture.jpg, Centre, Picture Info} non felis at est gravida tincidunt. {Link, news.bbc.co.uk, popup, 500, 800} Donec non diam a mauris vestibulum condimentum eu vitae mi! Aenean sed elit libero, id mollis felis! {Image, ServiceTile.jpg, Left}";

Regex PlaceholderExpander = new Regex(@"\{Image, ([^,]+), ([^,]+)(?:, ([^}]+))?\}");
string Expanded = PlaceholderExpander.Replace(YourHtmlStringWithPlaceholders,"<img src='$1' alt='$3' class='quipImg$2'></img>");

Console.WriteLine(Expanded);

关于c# - 识别占位符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332173/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com