全局替换正则表达式

时间:2017-12-22 09:39:56

标签: c# html regex

我需要将所有点(。)替换为html标签中可用的“[DOT]”而不是标签外部。即包含点(。)的属性值应替换为“[DOT]”而不是内部文本。

示例标记

<link rel="stylesheet" href="27674557W.patent.001_files/27674557W.patent.001.css" type="text/css"/>

更改应该是:

<link rel="stylesheet" href="27674557W[DOT]patent[DOT]001_files/27674557W[DOT]patent[DOT]001[DOT]css" type="text/css"/>

我在正则表达式中试过这种模式。

<(?:[^\.>]*)([\.])(?:[^>]*)>

替换c#中的代码是:

string inputText = <tagText>;
string pattern = @"<([^\.>]*)([\.])([^>]*)>";
inputText = Regex.Replace(inputText, pattern, "$1[DOT]$3", RegexOptions.Singleline);

以上代码仅替换选项卡中的第一个点,剩余的点不会改变。我需要在不使用c#中的任何循环的情况下单次更改。

注意:仅更换角支架内部。不在innertext。

感谢。

4 个答案:

答案 0 :(得分:1)

您可以尝试使用string.Replace()。

inputText = inputText.Replace(@".","[DOT]");

答案 1 :(得分:1)

为什么不简单地使用new Regex("\\.")?适合我,请参阅fiddle

然而用正则表达式解析HTML是个坏主意。在您的情况下,您应该事先使用HTML解析器,然后提取属性href。现在你可以继续你的正则表达式了:

var attribute = htmlparser.GetAttribute("href");
var result = r.Replace(attribute, "[DOT]");

甚至更简单,因为Jaime在没有正则表达式的情况下也回答了。

答案 2 :(得分:1)

您可以使用此正则表达式替换html标记内的.

(?<=<[^>]+)\.(?=[^>]*>)

答案 3 :(得分:0)

您可以使用此正则表达式:

<[a-z]+\s.*(\\.)?.*>

第一个字符集用于标记名称, 接下来是一个空白 然后跟随任何角色 然后一个点 那么任何其他角色