【问题标题】:Regex: Matching character set specific number of times正则表达式:匹配字符集特定次数
【发布时间】:2023-03-14 04:53:01
【问题描述】:

好的,这可能是一个非常愚蠢的问题,但我似乎找不到可行的答案,所以如果答案很明显,请原谅我的无知。我想要的只是一个正则表达式,它将精确匹配一个十六进制值 8 次。所以我尝试了这样的事情:

我的正则表达式:

 [0-9a-fA-F]{8}

示例输入:

 D651000000060D60FADF0DFCE080E020636263633534623231386339

示例失败输入(当我不希望它匹配给定的正则表达式时):

 ........@%........$dc073bcc-6aa5

但由于某种原因,这对我不起作用。据我了解,{8} 应该与前面的正则表达式匹配 8 次......但这似乎在 C# 或 notepad++ 中都不起作用。

提前致谢!

【问题讨论】:

  • 你对“十六进制值”的定义是什么?
  • 一个字符,0-F(或 f,因为我不关心大小写)
  • 将我想要的正则表达式想象为匹配一个字节,通过 ascii 字符串表示。
  • "A character, 0-F" - 您的正则表达式 确实 匹配文本中任意位置的 8 个十六进制数字。 “认为我想要匹配一个字节的正则表达式” - 一个字节由 两个 十六进制数字表示,不是吗?
  • 对,不假思索地打字。 8 位十六进制数字。但这不是问题的重点,8 个字符分别是 0-9、a-f 或 A-F

标签: c# regex notepad++


【解决方案1】:

你的问题有点令人困惑,如果你想要 6 个十六进制字符,8 次:

([0-9a-fA-F]{6}){8}

或 8 位十六进制字符:

[0-9a-fA-F]{8}[0-9a-fA-F]{4,8} 如果您不想要求 8 个字符。

我建议测试:

http://gskinner.com/RegExr/

如果这些不明白,您能否发布一个您尝试匹配的值的示例(请注意,如果您在记事本++ 中的多行中有这些值,您还需要寻找换行符)

【讨论】:

  • 我最终需要 start\end 锚点,以便匹配我正在迭代的每个字符串。
【解决方案2】:

更直接的答案!为了简单起见,我将在这些示例中使用的字符集从 0 到 9 的所有数字

  • 匹配所有数字,8 次: [0-9]{8}
  • 匹配所有数字,8 次或更多次: [0-9]{8}[0-9]*(先匹配 8 次,然后匹配任意次数)

你可以在这里测试:https://regexr.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2017-07-02
    • 2023-01-12
    相关资源
    最近更新 更多