首页 文章

全局替换正则表达式

提问于
浏览
0

我需要将所有的点( . )替换为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 回答

  • 1

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

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

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

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

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

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

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

    或者甚至更简单,因为Jaime也没有正则表达式回答 .

  • 0

    你可以使用这个正则表达式:

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

    第一个字符集用于标记名称,接下来是空格,然后是任何字符,然后是点,然后是任何其他字符

相关问题