【问题标题】:Regex to get one character not followed with digit正则表达式获取一个不跟数字的字符
【发布时间】:2021-05-12 01:59:41
【问题描述】:

如果里面没有 int,我如何获得第一个字符:

我需要查看所有有'[' 后面没有整数的地方。

例如:

[abc] pass
[cxvjk234] pass
[123] fail

现在,我有这个:

((([[])([^0-9])))

它获取前 2 个字符,而我只需要一个。

【问题讨论】:

  • ([[])?为什么不只是\[
  • 使用@"(?<=\[)\D"
  • 您能否检查我们的答案,看看它们是否适合您?您的描述有点不清楚。

标签: c# regex


【解决方案1】:

一般情况,要匹配一些不带数字的模式,需要在表达式中添加(?!\d) / (?![0-9]) negative lookahead

\[(?!\d)
\[(?![0-9])
  ^^^^^^^^^

请参阅regex demo。这匹配任何没有紧跟数字的[ 符号。


您当前的正则表达式模式被捕获组超载,如果我们删除那些多余的,它看起来像(\[)([^0-9]) - 它匹配[,然后匹配一个字符而不是ASCII数字。

你可以使用

(?<=\[)\D

或(如果您只想将 ASCII 数字与模式匹配)

(?<=\[)[^0-9]

regex demo

详情

  • (?&lt;=\[) - 在...之前需要 [(但不使用 [ 字符,即不将其作为匹配值的一部分返回)的积极回溯...
  • \D / [^0-9] - 非数字。 注意:要仅否定 ASCII 数字,您可以使用 \DRegexOptions.ECMAScript 标志。

【讨论】:

    【解决方案2】:

    一种可能的解决方案是:

    \[\D[^]]*\]
    # look for [
    # \D - not a digit
    # anything not ], zero or more times
    # followed by ]
    

    a demo on regex101.com

    【讨论】:

      【解决方案3】:

      不要使用太多括号。括号既是分组 又是 确定作为匹配返回的内容。

      \[([^0-9])
      

      如果您绝对需要使用括号,请使用 (?:…) 作为该分组但不作为匹配的一部分返回的括号。

      (?:(?:(?:\[)([^0-9])))
      

      【讨论】:

        【解决方案4】:

        也许您要搜索的是\[([^0-9]) 你希望[123abc] 通过吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-13
          • 1970-01-01
          • 2016-12-12
          • 1970-01-01
          • 2019-08-14
          • 1970-01-01
          相关资源
          最近更新 更多