我有接受此字符串并将其解析为字符数组的代码:
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做到这一点提供的建议:
答案 0 :(得分:0)
您可以使用
var textArray = Regex.Split(text, @"(?:</?span(?:\s+[^>]*)?>)+")
.Where(x => !string.IsNullOrEmpty(x));
Regex.Split
方法将根据匹配的字符串出现将字符串拆分为多个块。如果匹配发生在字符串边界,则将空项目添加到结果中,因此您需要使用.Where(x => !string.IsNullOrEmpty(x))
。
正则表达式匹配1次或多次出现的
<
-<
字符/?
-可选的/
span
-span
文字(?:\s+[^>]*)?
-可选的序列,包含1+个空格,然后是>
以外的0个或更多字符>
-一个>
字符。请参见regex demo
非捕获组((?:...)
)很重要,因为Regex.Split
还将所有捕获的子字符串添加到结果中。
或者,如果您只想抓取span
打开/关闭标签之间的所有文本,则:
var textArray = Regex.Matches(text, @"(?s)<span(?:\s+[^>]*)?>(.*?)</span>")
.Cast<Match>()
.Select(x => x.Groups[1].Value);
请参见C# demo。
在这里,<span(?:\s+[^>]*)?>
匹配span
和标记的所有内部部分,(.*?)
捕获内部文本,</span>
匹配结束标记。