用于标识占位符的正则表达式

问题描述

| 我试图用占位符内容构建的html元素替换文本文件中的占位符。 例如,我有一个占位符,例如
{Image,picture.jpg,Centre,Picture Info}
我想将其转换为:
<img src=\"urltopicture\\picture.jpg\" alt=\"Picture Info\" class=\"quipImgCentre\"></img>
我希望使用ѭ2来标识所有占位符,然后向后进行文档转换并依次替换每个占位符。 正则表达式{。*}在一行上只有一个占位符的地方起作用,但如果不止一个占位符-在下面的文本中,它将作为一个长的占位符返回,从第一个开头的\“ {\”到最后一个\“} \”。
 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>\");
[^,]
表示\“除
,
\以外的任何字符”,因此尽管贪婪的
+
量词也停在下一个
,
之前。这是提高处理速度的技巧。一个更明显的替代方法是使用懒惰(又称不贪心,不情愿)量词。
(?:…)
是一个非捕获组-不能用
$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 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,Left}\";

Regex PlaceholderExpander = new Regex(@\"\\{Image,\"<img src=\'$1\' alt=\'$3\' class=\'quipImg$2\'></img>\");

Console.WriteLine(Expanded);
    ,        基本上,您正在寻找“不匹配的比赛”(注意11英镑)。下列:
/\\{(.*?)\\}/
大括号内将匹配尽可能少的字符。从那里,您将需要获取内容并根据您认为格式应遵循的方式进行解析。 如果仅查找图像,当然也可以指定该图像:
/\\{Image (.*?)\\}/
    ,        我想您只想要
\\{[^{}\\n\\r]+}
之类的东西。 在其中添加
\\n\\r
,这样就不会在随机的ѭ21run上跑得太多。     ,        您可以将正则表达式更改为不太贪婪:
{[^}]+}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...