我需要将所有点(。)替换为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。
感谢。
答案 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.*(\\.)?.*>
第一个字符集用于标记名称, 接下来是一个空白 然后跟随任何角色 然后一个点 那么任何其他角色