【问题标题】:Regular Expression to replace Unicode between opening & closing tag正则表达式替换开始和结束标记之间的 Unicode
【发布时间】:2020-07-31 06:17:22
【问题描述】:

我需要最快的方法来替换 ' 标签旁边的字符串中的 unicode 符号

例如输入字符串:

<एक्सएम्ेल type = "ए"> क्सएम् </एक्सएम्ेल>

预期输出:

 <REPLACED type = "ए"> क्सएम् </REPLACED>`

标签内的值或类型元素的值不应该被替换,只有标签名应该被替换

这是我尝试过的代码,但不起作用

private static Regex _compiledUnicodeRegex = new Regex(@"<[^\u0000-\u007F]", RegexOptions.Compiled);



    public static String StripUnicodeCharactersFromString(string inputValue)
    {
        return _compiledUnicodeRegex.Replace(inputValue, "REPLACED");
    }

注意-

  1. unicode 值可能并不总是相同
  2. 字符串可能并不总是 XML 格式,所以我应该只匹配开始标签或结束标签
  3. 我需要一个正则表达式语法来检查 左边的字符串是 unicode

【问题讨论】:

  • 你以前问过这个问题。正则表达式在这类事情上是出了名的糟糕,它用于正则表达式而不是标记语言,你有没有机会使用专用的xml解析器来解析它?
  • 无法将其解析为 xml,上一个问题已被某人关闭,指出这可能与其他问题重复,但该字符串不是 XML 字符串,只有我需要的是验证 之后的字符串是否为 unicode
  • hrm 可能是(?&lt;=\&lt;)[^/\u0000-\u007F]+|(?&lt;=\&lt;/)[^\u0000-\u007F]+
  • 好的,所以我们可以假设这与 html/xml 无关,所以一旦提供了解决方案,您就不会再问如何排除某些 CDATA 部分中的文本,如何只替换特定匹配的打开和关闭标签而不是所有文本出现,...?即使您的标题提到了正则表达式,您实际上也想要一种快速(性能方面)的文本操作技术,无论是正则表达式还是不同的东西?
  • 有趣的事实:在 C# 内部字符串中,一切都是 unicode。但是,并非每个字符都是 unicode,因为一些稀有符号由多个字符表示。因此,如果我对您的理解正确,您通常希望在文本中的第一个 &lt; 之后或最后一个 &gt; 之前毫无例外地替换所有文本?但是,您的描述与您的示例不符。请澄清。

标签: c# .net regex


【解决方案1】:

您希望仅在 &lt;&lt;/ 之后替换由非 ASCII 字符组成的一串文本,这是一个可以用正则表达式解决的问题。

你可以使用

var result = Regex.Replace(text, @"(?<=</?)[^\x00-\x7F]+", "REPLACED");

参见.NET regex demo(注意它允许无限宽度的lookbehind 模式)。

正则表达式匹配

  • (?&lt;=&lt;/?) - (正向后视)字符串中的位置,前面有 &lt;&lt;/(换句话说,前面有 &lt;,后面可能有也可能没有 /
  • [^\x00-\x7F]+ - 1 个或多个字符,而不是 ASCII 集中的字符。

【讨论】:

  • 啊这看起来好多了,当他们分发正则表达式技能时我躲在门后
  • 自闭标签怎么样,即。 ?
  • @Gulikz 我认为still fits 是当前的要求。
猜你喜欢
  • 2014-10-19
  • 2010-10-05
  • 2019-03-06
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多