Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#和regex将字符添加到空html标记中_C#_Html_Regex - Fatal编程技术网

使用c#和regex将字符添加到空html标记中

使用c#和regex将字符添加到空html标记中,c#,html,regex,C#,Html,Regex,我想在字符串中查找所有空HTML标记,例如: <div></div> <span>test</span> <a></a> 测试 并向该字符串中的所有空标记添加空格或字符: <div>something</div> <span>test</span> <a>something</a> 什么 测试 某物 我有一个匹配所有空标记的正则表达式,但我不确

我想在字符串中查找所有空HTML标记,例如:

<div></div>
<span>test</span>
<a></a>

测试
并向该字符串中的所有空标记添加空格或字符:

<div>something</div>
<span>test</span>
<a>something</a>
什么 测试 某物 我有一个匹配所有空标记的正则表达式,但我不确定替换标记的最佳方法是什么

正则表达式:

<(\w+)(?:\s+\w+="[^"]+(?:"\$[^"]+"[^"]+)?")*>\s*</\1>
用于Html解析。

用于Html解析。

使用

使用

描述 通过正则表达式处理这个问题可能不是最好的方法,但是,因为可能有理由使用正则表达式,例如“我不允许安装HTMLAgilityPack”,那么这个表达式将:

  • 查找所有标记,这些标记只是打开标记,后跟关闭标记
  • 将避免许多边缘情况,这些情况使得使用正则表达式进行HTML模式匹配变得困难
正则表达式:
()(?:[^'>=]*.='[^']*'.[^']*'.[^']*.[^']*.[^'][^\s>]*)*>)()

替换为:
$1~~~NewValue~~~~$3

例子

示例文本

<a onmouseover=' str=" <a></a> " ; if ( 6 > 4 ) { funDoSomething(str); } '>~~~NewValue~~~</a>
<div>~~~NewValue~~~</div>
<span>test</span>
<a>~~~NewValue~~~</a>
注意,第一行有一些非常困难的边缘情况

<a onmouseover=' str=" <a></a> " ; if ( 6 > 4 ) { funDoSomething(str); } '></a>
<div></div>
<span>test</span>
<a></a>

测试
替换后的文本

<a onmouseover=' str=" <a></a> " ; if ( 6 > 4 ) { funDoSomething(str); } '>~~~NewValue~~~</a>
<div>~~~NewValue~~~</div>
<span>test</span>
<a>~~~NewValue~~~</a>
~~~NewValue~~~
~~~~新值~~~
测试
~~~~新值~~~
说明 通过正则表达式处理这个问题可能不是最好的方法,但是,因为可能有理由使用正则表达式,例如“我不允许安装HTMLAgilityPack”,那么这个表达式将:

  • 查找所有标记,这些标记只是打开标记,后跟关闭标记
  • 将避免许多边缘情况,这些情况使得使用正则表达式进行HTML模式匹配变得困难
正则表达式:
()(?:[^'>=]*.='[^']*'.[^']*'.[^']*.[^']*.[^'][^\s>]*)*>)()

替换为:
$1~~~~NewValue~~~~$3

例子

示例文本

<a onmouseover=' str=" <a></a> " ; if ( 6 > 4 ) { funDoSomething(str); } '>~~~NewValue~~~</a>
<div>~~~NewValue~~~</div>
<span>test</span>
<a>~~~NewValue~~~</a>
注意,第一行有一些非常困难的边缘情况

<a onmouseover=' str=" <a></a> " ; if ( 6 > 4 ) { funDoSomething(str); } '></a>
<div></div>
<span>test</span>
<a></a>

测试
替换后的文本

<a onmouseover=' str=" <a></a> " ; if ( 6 > 4 ) { funDoSomething(str); } '>~~~NewValue~~~</a>
<div>~~~NewValue~~~</div>
<span>test</span>
<a>~~~NewValue~~~</a>
~~~NewValue~~~
~~~~新值~~~
测试
~~~~新值~~~

Tip:use HtmlAgilityPack(regex是多余的):)使用HTML/XML解析器并在DOM树上进行交互-这将为您节省很多痛苦。据我所知,agilitypack可以将HTML的其余部分搞乱,对某些标记进行“修复”,如..提示:use HtmlAgilityPack(regex是多余的):)使用HTML/XML解析器并在DOM树上交互-这将为您省去很多麻烦。从我阅读的内容来看,agilitypack可能会搞乱HTML的其余部分,对某些标记进行“修复”,如..如果我没有完整的HTML文档怎么办?我只是有一个较大文档的一小部分,我只是想替换一些标签。。还有路要走吗?我觉得大家已经决定,如果在一个问题中使用HTML和正则表达式,HTML解析器是唯一的选择…@f01,不管HTML是什么形式的。
是否不完整
无结束标记
不是html
这个解析器仍然可以完美地工作,没有任何问题。@f01您可以使用类似于
(?如果我没有一个完整的html文档怎么办?我只是有一个较大文档的一小部分,我只是想替换一些标记..还有一段路要走吗?我感觉人群已经决定,如果在一个问题中使用html和正则表达式,html解析器是唯一的选择…@f01无论html是什么形式..是否
不完整
无结束标记!
不是html!!!
此解析器仍然可以正常工作,没有任何问题。@f01您可以使用类似于
的正则表达式(?-1因为你提出的解决方案并没有真正为问题提供答案。充其量,这是对一个相当具体的请求的模糊方向。-1因为你提出的解决方案并没有真正为问题提供答案。充其量,这是对一个相当具体的请求的模糊方向。