我有一段代码,它接受这个字符串并将其解析为一个字符数组:
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>
匹配关闭标签。