作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用占位符内容构建的 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/
我是一名优秀的程序员,十分优秀!