【问题标题】:Trouble matching \u0002 using C# Regex使用 C# 正则表达式匹配 \u0002 时遇到问题
【发布时间】:2017-05-09 18:08:54
【问题描述】:

我无法匹配:SD: \u0002 使用:
Regex.Match(@"SD: \u0002US^NE^STATE^12345^SOME NAME^\u0002\u0002STREETNAME\u0002ST\u0002\u0002\u00022115\u0004^NAME OF SOME ORG^^^ ", @"SD:\s\u0002")

根据 MS 文档,\u nnnn 应用于匹配 \u0002
注意:字符串的来源是 ASCII 文件,用 Encoding.ASCII 读取,但 VS Studio 显示的是 Unicode \u0002 字符。

【问题讨论】:

  • 第一个字符串以@为前缀,因此会按字面意思解释。然而,该模式将被解释为转义序列。从第一个字符串中删除 @。
  • 为什么'u'和n's之间有空格?你在看什么 MS 文档?通常在大多数应用程序中没有空间。
  • 删除@后,您还需要通过输入\s+来匹配多个空格,并转义斜线,因为您不再拥有@:"SD:\\s+\u0002"
  • 显然 OmegaMan 真的想要积分,所以如果你愿意,请成为我的客人并接受他的抄袭答案,假设 Quantic 不介意,因为他也帮助回答了。我没有发布正式答案,因为我觉得这是一个简单的调试练习——真正的问题不在于问题所暗示的匹配 \u0002 。这是关于小心理解每个符号并重新阅读代码。这类问题可以通过缩减测试文本并打印出转义字符串以查看它们实际返回的内容来解决。下次还要注意你发布的数据。
  • "VS Studio 显示 Unicode \u0002 字符" 没错; .NET 字符串是 UTF-16 代码单元的计数序列。 UTF-16 是 Unicode 字符集的几种编码之一。

标签: c# regex ascii


【解决方案1】:

删除数据字符串前面的@,以便 C# 编译器正确转义 Unicode 字符。

但这适用于该模式,因为 C# 编译器需要它是文字,但是 regex 解析器的以下处理不会将其读取为文字

您的模式中还需要\s+,因为有多个空格。这对我有用,方法是删除字符串前面的 @ C# 文字,而不是编辑示例中的模式:

Regex.Match("SD:  \u0002US", @"\s+\u0002")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2012-07-11
    • 2019-02-02
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多