C#如何在<>的基础上拆分字符串字符

时间:2012-11-20 10:31:28

标签: c# regex

我想通过<>分割我的文字字符。
例子假设我有一个字符串

 string Name="this <link> is my <name>";

现在我想拆分它,以便我有一个像

这样的字符串数组
ar[0]="this "
ar[1]="<link>"
ar[2]=" is my "
ar[3]="<name>"

我尝试使用像

这样的分割功能
string[] ar=Name.Split('<');

我也试过

 string[] nameArray = Regex.Split(name, "<[^<]+>");

但这不是给我的

 "<link>"
 and "<name>"

但这不是一个好方法 我可以在这里使用正则表达式

1 个答案:

答案 0 :(得分:8)

Regex r = new Regex(@"(?<=.)(?=<)|(?<=>)(?=.)");
foreach (var s in r.Split("this_<link>_is_my_<name>"))
{
    Console.WriteLine(s);
}

给出

this_
<link>
_is_my_
<name>

(用于清晰的下划线)

正则表达式在零宽度点上分裂(因此它不会删除任何东西),这是:

  • 前面有一些内容,然后是<
  • >开头,后跟

如果您的字符串以括号中的内容开头或结尾,则必须进行“某事”检查以避免在开头或结尾处出现空字符串。

注意"<link<link>>"之类的内容会给你{ "<link", "<link>", ">" },所以尽量让你的尖括号平衡。

如果想要空字符串,如果字符串以<开头或以>结尾,则可以使用(?=<)|(?<=>)。如果您在遇到><时想要空字符串在中间,我您需要首先拆分(?=<),然后拆分所有结果在(?<=>)上 - 我不会认为你可以一次性完成。