c# - C# 中 regex.unescape 的替代方案,用于引号 (")

标签 c# .net regex

所以我在这里面临一个问题,我确信有一个简单的答案,但我似乎找不到它。

我正在使用 C# 代码比较 2 个表中的字符串数据 当两个表中的数据均为空或为空时,我希望比较返回“True”,这基本上意味着它们是相同的。

我正在使用 string.IsNullorEmpty 来检查 null 或空条件。 问题出在一个表中,字符串值为 "" 而另一个表具有相同的转义值,并显示为 "\"\""

我假设使用regex.unescape可以解决这个问题,但它似乎不起作用,而且我得到的输出表明两个值不同,导致出现问题。

我想到的一个解决方案是直接检查 str == "\"\"" 是否可以解决问题。

但是还有更清洁的选择吗?

最佳答案

我认为你在这里混合了东西。

如果您的字符串来自同一数据源,那么它们要么全部被转义,要么都没有(如果不是这种情况,那么您遇到的问题比您所陈述的问题更大)。

所以,如果它们没有转义,并且其中一个包含 "",另一个包含 \"\",那么它们不相等,一个长度为 2 个字符,另一个为 4 个字符。

所以我假设它们被转义,并且数据库中的第一个字符串实际上是空的(它不包含任何字符),第二个字符串是 \"\"

然后您可以使用 Regex.Unescape (如果它们总是被转义),但是这两个字符串并不相同:一个是空的,另一个包含(一旦未转义),"",因此第一个字符串不包含字符,而第二个字符串包含两个字符:难怪它们不会被比较相等。

现在,如果它们确实被转义,那么包含 "" 是没有意义的,因为这些字符应该被转义。如果情况并非如此,那么您会遇到一个非常具体的问题,这不是您所要求的:您需要确定您的字符串是否从数据源中转义......这基本上是不可能的,除非有一个非常具体的问题确定这一点的一组规则。

如果数据源包含随机转义或不包含字符串,假设您的数据源返回一个字符串 \"\":如何确定实际内容是否被转义,这意味着 { '"','"'} (2 个字符,每个字符都是双引号),或者如果不是,则为 4 个字符,表示 {'\','"', '\','"'} (一个反斜杠,一个双引号,一个反斜杠和一个双引号)?除非您有确定这些规则的规范(或说明字符串是否被转义的另一个字段),否则无法判断。

所以,回到你的问题:虽然你没有输入任何代码,但我的猜测是它并没有错:要么你的期望是错误的(你想要 \"\"表示字符串为空,但事实并非如此,因为它根本不是这个意思),或者您的数据是错误的。

无论哪种方式,都没有通用的代码解决方案...对于特定案例有特定代码解决方案(例如您所展示的案例),但不是一个通用的:根据您在问题中提供的信息,这是不可能的

在胡言乱语之后,现在给出一个具体的答案,如果您的表 A 包含未转义的字符串,并且您的表 B 包含转义的字符串:

stringFromTableA == Regex.Unescape(stringFromTableB)

如果 stringFromTableA 包含 ""stringFromTableB 包含 \"\"<,则应返回 true/Check it它们都不会为空,因此 string.IsNullOrEmpty() 将返回 false

更新:如果您在 Visual Studio 调试器中检查这些字符串值,调试器会显示它们已转义,因此,如果您在其中看到 ""\"\" 在另一个中,那么您的第一个字符串为空(并且 string.IsNullOrEmpty 将返回 true),并且您的第二个字符串包含两个双引号: string.IsNullOrEmpty 将返回 false,因为它实际上不是 null 或空。并且 Regex.Unescape 在这种情况下不会执行任何操作,因为您的字符串不包含任何 \ 并且没有任何可转义的内容,它只是调试器显示那些 \ 的。

关于c# - C# 中 regex.unescape 的替代方案,用于引号 ("),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35707756/

相关文章:

C# 多线程 : Acquire read lock necessary?

c# - 如何使 WCF session 更安全?

c# - 如何在.NET Core中使用多个项目创建docker镜像?

c# - 如何实现不将响应封装在 XML 中的 .Net WebService?

java - 用于提取字符串的正则表达式

c# - 无法将动态表实体转换为自定义实体 Azure 表存储

c# - 当类型在运行时已知时,如何将数据库中的值映射到我的对象?

c# - WPF TextBox 移动光标和改变焦点

python - 在需要非贪婪匹配的情况下匹配正则表达式

从字符串中获取所有电子邮件的 JavaScript 正则表达式