首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex / C#字符串--将伪通配符放入数组

Regex / C#字符串--将伪通配符放入数组
EN

Stack Overflow用户
提问于 2014-06-25 18:39:40
回答 3查看 192关注 0票数 0

我想在C#中用字符串创建一些通配符。这样,终端用户就可以用通配符填充一大团文字。想象一下:

代码语言:javascript
运行
复制
var targetString = 
@"There is a banana in this %%object%%.   
For this, we use %%type of tool%% to remove it.";

假设%%是通配符分隔符。代码将解析第一个%%和后面%%,并确定通配符为objecttype of tool。将它们作为字符串数组返回将非常困难,只要我能够遍历文本中的所有伪通配符,这并不重要。

有人能给我提供一些正则表达式(或C#字符串操作)的线索吗?我当然可以打破我以前的VBScript方法,开始基于%%拆分这个字符串--但是这是非常低效率的,而且我怀疑在C#字符串上使用Regex有一种更简单的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-25 18:44:39

代码语言:javascript
运行
复制
var res = Regex.Matches(targetString, @"%%(.+?)%%").Cast<Match>()
                    .Select(m => m.Groups[1].Value)
                    .ToList();
票数 2
EN

Stack Overflow用户

发布于 2014-06-25 18:45:11

您可以尝试类似于%%([^(%%)].*?)%%的方法,并在索引1处得到匹配的组。

用于程序的字符串文字:

代码语言:javascript
运行
复制
 @"%%([^(%%)].*?)%%"

正则表达式的意思是%%,后面跟着任何东西,直到找到%%为止。

这里,圆括号()用于分组。我已经测试过了这里

票数 1
EN

Stack Overflow用户

发布于 2014-06-25 19:50:55

听起来你在尝试建立某种模板系统。与其滚动您自己的引擎,您可能希望查看现成的模板引擎,如StringTemplate

ST允许您这样做:

代码语言:javascript
运行
复制
using Antlr4.StringTemplate;

Person person = new Person() ;
person.Name = "John" ;
person.Street = "123 Main St" ;
person.City   = "Anytown" ;
person.Zip    = 12345 ;

Template hello = new Template("Hello. My name is <p.Name>. My Address is <p.Street>, <p.City>,  <p.State> <p.Zip>.");

hello.Add("p", person);
Console.Out.WriteLine(hello.Render());

并将预期的文本写入控制台:

代码语言:javascript
运行
复制
Hello. My Name is John. My address is 123 Main St, Anytown, PA 12345.

好的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24416151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档