如何删除包含未知字符的子字符串的所有匹配项?

时间:2019-05-15 15:01:34

标签: string vb.net replace character

通常,您将使用以下表达式从字符串中删除所有子字符串:

text.Replace(" uipath_custom_id=""587""","")

这将删除字符串中的所有子字符串,并且在没有任何此类子字符串时也不会引发异常。

但是如果引号之间有未知字符怎么办?字符未知时如何获得相同的结果?

这是我要处理的字符串。有时它包含多个“ uipath_custom_id =“” 587“”“子字符串,有时没有。

outerhtml='<div class="_3_7SH _3DFk6 message-out" uipath_custom_id="567"><div class="Tkt2p"><div class="copyable-text" data-pre-plain-text="[9:42 AM, 5/15/2019] sash: "><div class="_3zb-j ZhF0n"><span dir="ltr" class="selectable-text invisible-space copyable-text">Hello World!</span></div></div><div class="_2f-RV"><div class="_1DZAH" role="button"><span class="_3EFt_">9:42 AM</span><div class="_32uRw"><span data-icon="msg-time" class=""><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 15" width="16" height="15"><path fill="#859479" d="M9.75 7.713H8.244V5.359a.5.5 0 0 0-.5-.5H7.65a.5.5 0 0 0-.5.5v2.947a.5.5 0 0 0 .5.5h.094l.003-.001.003.002h2a.5.5 0 0 0 .5-.5v-.094a.5.5 0 0 0-.5-.5zm0-5.263h-3.5c-1.82 0-3.3 1.48-3.3 3.3v3.5c0 1.82 1.48 3.3 3.3 3.3h3.5c1.82 0 3.3-1.48 3.3-3.3v-3.5c0-1.82-1.48-3.3-3.3-3.3zm2 6.8a2 2 0 0 1-2 2h-3.5a2 2 0 0 1-2-2v-3.5a2 2 0 0 1 2-2h3.5a2 2 0 0 1 2 2v3.5z"></path></svg></span></div></div></div></div><span></span></div>'

1 个答案:

答案 0 :(得分:1)

首先,必须说-正则表达式不是尝试解析或处理HTML的正确工具。 HTML不是一种“常规语言”,因此,如果您愿意,正则表达式的功能还不足以处理它们。就是说,如果您要使用HTML进行的操作足够简单,并且要解析的HTML的内容和格式相对一致,则有时regex很好,而成熟的HTML解析引擎就显得过分了。如果是这种情况,那么您可以使用regex这样:

Dim outerHtml As String = "<div class=""_3_7SH _3DFk6 message-out"" uipath_custom_id=""567""><div class=""Tkt2p""><div class=""copyable-text"" data-pre-plain-text=""[9:42 AM, 5/15/2019] sash: ""><div class=""_3zb-j ZhF0n""><span dir=""ltr"" class=""selectable-text invisible-space copyable-text"">Hello World!</span></div></div><div class=""_2f-RV""><div class=""_1DZAH"" role=""button""><span class=""_3EFt_"">9:42 AM</span><div class=""_32uRw""><span data-icon=""msg-time"" class=""""><svg id=""Layer_1"" xmlns=""http://www.w3.org/2000/svg"" viewBox=""0 0 16 15"" width=""16"" height=""15""><path fill=""#859479"" d=""M9.75 7.713H8.244V5.359a.5.5 0 0 0-.5-.5H7.65a.5.5 0 0 0-.5.5v2.947a.5.5 0 0 0 .5.5h.094l.003-.001.003.002h2a.5.5 0 0 0 .5-.5v-.094a.5.5 0 0 0-.5-.5zm0-5.263h-3.5c-1.82 0-3.3 1.48-3.3 3.3v3.5c0 1.82 1.48 3.3 3.3 3.3h3.5c1.82 0 3.3-1.48 3.3-3.3v-3.5c0-1.82-1.48-3.3-3.3-3.3zm2 6.8a2 2 0 0 1-2 2h-3.5a2 2 0 0 1-2-2v-3.5a2 2 0 0 1 2-2h3.5a2 2 0 0 1 2 2v3.5z""></path></svg></span></div></div></div></div><span></span></div>"
Dim pattern As String = "\buipath_custom_id=""[^""]+""\b"
outerHtml = Regex.Replace(outerHtml, pattern, "")

根据您的需要,可以使模式更严格。例如,通过使用\d而不是[^""],可以将引号之间的“未知”文本限制为仅替换为数字形式。或者,您可以使它更宽松。例如,您可以通过在等号的两边加上\s*来使等号周围有空格,如下所示:

Dim pattern As String = "\buipath_custom_id\s*=\s*""\d+""\b"

关键是,正则表达式非常灵活,因此要对它施加什么规则,或者要允许对它进行哪些变化。 {。{3}}用于.NET中的正则表达式语法。