【问题标题】:RegEx to match a number in the second line正则表达式匹配第二行中的数字
【发布时间】:2013-09-06 02:05:31
【问题描述】:

我需要一个正则表达式来匹配第二行中的数字。类似的输入是这样的:

^C1.1
xC20 
SS3 
M 4 

十进制模式(-?\d+(\.\d+)?) 匹配所有数字,第二个数字可以在后面的代码中循环获取,但我需要一个正则表达式来直接获取第二行中的数字。

【问题讨论】:

  • 感谢 Rahul,它是 C#
  • 另外,你要找的号码总是在第二行吗?
  • 试试这个:- /^[^\r\n]*\r?\n\D*(-?\d+(\.\d+)?)/
  • 有时 3 行或更多,但有时只有 2 行

标签: c# regex


【解决方案1】:
/^[^\r\n]*\r?\n\D*?(-?\d+(\.\d+)?)/

这通过在输入的开头捕获一行来操作:

^         Beginning of the string
[^\r\n]*  Anything that isn't a line terminator
\r?\n     A newline, optionally preceded by a carriage return

然后是所有非数字字符,然后是你的数字。

由于您现在反复改变了您的需求,请尝试以下尺寸:

/(?<=\n\D*)-?\d+(\.\d+)?/

【讨论】:

  • 感谢您的回复,但已超过第二行号
  • 我使用了lookbehind。这是完成您正在寻找的东西的一种更昂贵的方式 - 但它会匹配只是数字
  • 这就是我要找的 :) 谢谢 :))
【解决方案2】:

我能够用这个正则表达式捕获它。

.*\n\D*(\d*).*\n

【讨论】:

  • 前导 .* 有点不必要。跟尾随的 .*\n 一样。
  • 它与前两行匹配,我只需要第二行号
  • \n\D*(\d*).*\n 这仅适用于第二行但获取所有行,而不仅仅是数字:(
  • @FrankieTheKneeMan 感谢您的提示。我对正则表达式比较陌生。
  • @ihsany 直到我发帖后才发现您使用的是 C#。对于那个很抱歉。我的似乎在Pythex 工作。
【解决方案3】:

查看第 1 组匹配的任何内容:

^.*?\r\n.*?(\d+)

如果这不起作用,试试这个:

^.*?\r\n.*?(\d+)

两者都未设置多行...

【讨论】:

    【解决方案4】:

    我可能会在/^.*?\r?\n.*?(-?\d+(?:\.\d+)?)/ 中使用捕获的组...

    ^                  # beginning of string
    .*?                # anything...
    \r?\n              # followed by a new line
    .*?                # anything...
    (                  # followed by...
       -?              # an optional negative sign (minus)
       \d+             # a number
       (?:             #   -this part not captured explicitly-
           \.\d+       # a dot and a number
       )?              #   -and is optional-
    )
    

    如果它是一种支持lookbehind的风格,那么还有其他替代方案。

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 2018-05-19
      • 2020-05-03
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多