我有一个字符串,可能包含以下一个或多个标签:
<CHOICE [some words] [other words]>
我需要替换 (C#) 所有出现的这个标签,如下所示:
Example: I like <CHOICE [cars and bikes] [apple and oranges]>
Result: I like cars and bikes
Example: I like <CHOICE [cars and bikes] [apple and oranges]>, I also like <CHOICE [pizza] [pasta]>
Result: I like cars and bikes, I also like pizza
基本上,只用第一组括号中出现的字符串替换整个标签。
看起来捕获组是可行的方法,但我无法理解如何使它们工作。
感谢任何帮助!
编辑:Regex 不是必需的,我认为这将是最好的方法,但我看到一些评论告诉我不需要它,所以任何其他建议都一样好。谢谢!
请您参考如下方法:
纯属娱乐。这是一个校园 foreach 状态机,具有线性 O(n) 时间复杂度。
var line = "I like <CHOICE [cars and bikes] [apple and oranges]>";
var result = new StringBuilder();
var state = 0;
foreach (char c in line)
{
if (state == 0 && c == '<') state = 1;
else if (state == 1 && c == '[') state = 2;
else if (state == 2 && c == ']') state = 3;
else if (state == 3 && c == '>') state = 0;
else if (state == 0 || state == 2) result.Append(c);
};
输出
I like cars and bikes
