【发布时间】:2016-11-02 02:51:27
【问题描述】:
我有这个正则表达式
([\s\S]*?)\[T\]([\s\S]*?)\[\/T\]([\s\s]*?)
这应该提取[T][\T] 之前、之间和之后的所有内容,但我总是让第三个捕获组为空。
我的文字是:
<h1>HelloWorld</h1>
[T]
<h2>I'm Inside</h2
[/T]
<h1>HelloWorld</h1>
[T]
<h2>I'm Inside</h2
[/T]
<h3>By World</h3>
我使用了Regexr 和Regex101 并得出的结论是错误出在最后一个捕获组([\s\S]*?) 上的? 中,因为正在做* 懒惰。但是,如果我删除它,它会将所有内容分组为一个匹配而不是两个。
编辑:
基本上我想做类似的事情
var template = @" <h1>HelloWorld</h1>
[T]
<h2>I'm Inside</h2
[/T]
<h1>HelloWorld</h1>
[T]
<h2>I'm Inside</h2
[/T]
<h3>By World</h3>";
var regex = new Regex("([\s\S]*?)\[T\]([\s\S]*?)\[\/T\]([\s\s]*?)");
var finalString = regex.Replace(template,"$1 ; $2 ; $3");
// finalString = HelloWorld ; I'm Inside ; By World //
任何帮助表示赞赏。
【问题讨论】:
-
你能指定(更具体地)期望的结果是什么吗?因为据我所知,这个正则表达式选择了除最后一行之外的所有内容(包括 [T] 和 [/T] 标签)。
-
准备好了,进行了编辑,是的,这很简单。我想选择所有发生错误的地方,包括最后一行。
-
您的问题不太清楚,因为您正试图捕获标签内的文本,并输出没有标签的文本 - 1 次通过是不可能的。
h2标签没有用>关闭 - 这真的是你所拥有的吗?[\s\s]没有意义,它等于\s。目前只能推荐ideone.com/upIXLR,请查看更新。 -
对不起,我的错是\s\S