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