我有一些代码可以接受这个字符串并将其解析为一个字符数组:
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来做这件事提供任何建议,我将不胜感激:
发布于 2019-11-03 21:58:35
你可以用
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或多个字符> -a > char.见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>匹配关闭标记。
https://stackoverflow.com/questions/58684576
复制相似问题