如何使用正则表达式在 and 和 <span> and </span> 之间创建任何内容的数组 </span> <span> ?



我有一段代码,它接受这个字符串并将其解析为一个字符数组:

var textArray = Regex.Replace(text, @"</?span( [^>]*|/)?>",    
String.Empty).Trim().ToCharArray();
<span>そ</span><span>れ</span><span>に</span><span>も</span>拘<span>わ</span><span>ら</span>もも<span>ず</span>

但现在我需要做一些不同的事情,我不知道该怎么做。我需要的是将这样的字符串解析为这样的数组:

そ
れ
に
も
拘
わ
ら
もも
ず

其中<span></span>之间的任何东西都是数组中的元素,并且也是</span><span>之间的任何元素。

如果有人能为我提供任何关于如何使用Regex的建议,我将不胜感激:

您可以使用

var textArray = Regex.Split(text, @"(?:</?span(?:s+[^>]*)?>)+")
.Where(x => !string.IsNullOrEmpty(x));

Regex.Split方法将通过匹配的字符串出现将字符串拆分为块。如果匹配发生在字符串边界,则会向结果中添加空项,因此需要使用.Where(x => !string.IsNullOrEmpty(x))

正则表达式匹配一次或多次出现的

  • <-<字符
  • /?-可选/
  • span-span文本
  • (?:s+[^>]*)?-一个可选的序列,包含1+个空格,然后是除>之外的0个或更多个字符
  • >-一个>字符

查看regex演示

非捕获组((?:...)(很重要,因为Regex.Split还将把所有捕获的子串添加到结果中。

或者,如果您只想获取span打开/关闭标签之间的所有文本:

var textArray = Regex.Matches(text, @"(?s)<span(?:s+[^>]*)?>(.*?)</span>")
.Cast<Match>()
.Select(x => x.Groups[1].Value);

请参阅C#演示。

这里,<span(?:s+[^>]*)?>匹配span和标签的所有内部,(.*?)捕获内部文本,</span>匹配关闭标签。

最新更新