首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Regex在<span>和</span>、</span>和<span>之间创建一个数组?

如何使用Regex在<span>和</span>、</span>和<span>之间创建一个数组?
EN

Stack Overflow用户
提问于 2019-11-03 21:00:59
回答 1查看 70关注 0票数 2

我有一些代码可以接受这个字符串并将其解析为一个字符数组:

代码语言:javascript
复制
var textArray = Regex.Replace(text, @"</?span( [^>]*|/)?>",    
String.Empty).Trim().ToCharArray();

<span>そ</span><span>れ</span><span>に</span><span>も</span>拘<span>わ</span><span>ら</span>もも<span>ず</span>

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

代码语言:javascript
复制
そ
れ
に
も
拘
わ
ら
もも
ず

<span></span>之间的任何东西都是数组中的一个元素,</span><span>之间的任何东西。

如果有人能就我如何使用Regex来做这件事提供任何建议,我将不胜感激:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-03 21:58:35

你可以用

代码语言:javascript
复制
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打开/关闭标记之间的所有文本:

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

C#演示

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58684576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档