【发布时间】:2016-08-30 15:04:38
【问题描述】:
我有一个带有自定义宏的文本字符串:
“一些文字{MACRO(parameter1)} 更多文字{MACRO(parameter2)}”
为了处理宏,我想像这样拆分字符串:
预期结果
“一些文字”
“{宏(参数 1)}”
“更多文字”
"{MACRO(parameter2)}"
我尝试使用 Regex.Split() 拆分字符串
public static string[] Split(string input)
{
var regex = new Regex(@"{MACRO\((.*)\)}");
var lines = regex.Split(input)
return lines;
}
但是 Regex.Split() 会删除匹配本身并给我以下信息:
实际结果
“一些文字”
“更多文字”
我知道我可以通过 .Match() 和 .Substring() 的迭代来解析字符串
但是有没有一种简单的方法可以将结果与匹配项一起获取?
【问题讨论】:
-
你的模式不适合我。应该是
@"{MACRO\([^})]*\)}"。这将正确拆分字符串。现在,如果您还将模式 ([^})]) 的参数部分设为捕获组(即完整模式应为@"{MACRO\(([^})]*)\)}"),那么您的函数将按预期工作。 -
试试这个
regex = new System.Text.RegularExpressions.Regex(@"({MACRO\(.*?\)})"); -
查看这个工作示例:dotnetfiddle.net/bClOo5
-
@GoodNightNerdPride 是的,示例中的正则表达式是错误的
标签: c#