我有一个文本,其中将包含带有html span标签的纯文本,我需要从该文本中提取匹配的组。
示例文字:
<p>This is post
<span class='atwho-inserted' data-atwho-at-query='#' data-channel-tag='true'>
<span data-value='CR345sdfqDdjPuEbsAQ=='>newpost</span></span>
with intention to make
<span class='atwho-inserted' data-atwho-at-query='#' data-channel-tag='true'>
<span data-value='CRsdf345DdjPuEbsAQ=='>newchannel</span></span>
and see how
<span class='atwho-inserted' data-atwho-at-query='#' data-channel-tag='true'>
<span data-value='Ce3DzasdfdqqDdjPuEbsAQ=='>textforthis</span></span>
gets genrated.
</p>
现在我要从中提取的是服务器端正则表达式中的newpost,newchannel,textforthis
组匹配。
我尝试的方法如下
New Regex("<span [^>]*?data-value=[\\""|']{1,2}[^""']*[\\""|']>(?<hashtag>[^""<\/]+)<\/span>", RegexOptions.Compiled)
哪些作品很棒,并给了我所需的小组。但是我不擅长编写正则表达式,并且在考虑可以优化此正则表达式吗?
答案 0 :(得分:1)
为了优化正则表达式,您有几种选择。灵活性将是一个奖励。
这四个正则表达式的步骤比您提供的2个正则表达式(3785和1296)要少
Android
仅具有spans
属性,则可以使用:data-value
请参见 {{3} } 。我认为这是最快的解决方案( 279个步骤)。但是,如果<span data-value[^>]+>(?<hashtag>[^\s<]+)
在span
之前有一些其他属性,它将失败data-value
)在概念上与案例1类似。它并不慢( 342步)并且可以处理<span (?>[^>d]*)data-value[^>]+>(?<hashtag>[^\s<]+)
之前的属性只要上面没有data-value
字母d
)在任何情况下都可以使用,即使您在<span (?>(?>[^>d]*)(?(?=data-value)[^>]+|d))*>(?<hashtag>[^\s<]+)
之前找到了一些属性。这是 903步 data-value
)也适用于任何情况。它更易于阅读,但会花费更多( 1146个步骤)此外,我认为步骤数只是一个起点或指南。最后,我将依靠一些基准来决定。