【问题标题】:Regex - Extract second position digit from string正则表达式 - 从字符串中提取第二个位置数字
【发布时间】:2021-09-12 20:36:37
【问题描述】:

我有一个正则表达式:

var thisMatch = Regex.Match(result, @"(?-s).+(?=[\r\n]+The information appearing in this document)", RegexOptions.IgnoreCase);

这将返回“此文档中出现的信息”之前的行。 我的正则表达式的输出是

10 880 $10,000 $800 $25 $10

我需要提取 880,它总是在第二个位置(880 之前的数字可能不同,因此不应允许 \d{0,2})。

如何获取第二个位置编号?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    你可以使用类似的东西

    (?<=^\S+[\p{Zs}\t]+)\d+(?=.*[\r\n]+The information appearing in this document)
    

    请参阅.NET regex demo。在 C# 中:

    var output = Regex.Match(result, @"(?<=^\S+[\p{Zs}\t]+)\d+(?=.*[\r\n]+The information appearing in this document)", RegexOptions.Multiline)?.Value;
    

    或者,您可以捕获该号码并从一个组中获取它

    ^\S+[\p{Zs}\t]+(\d+).*[\r\n]+The information appearing in this document
    

    this regex demo。在 C# 中:

    var output = Regex.Match(result, @"^\S+[\p{Zs}\t]+(\d+).*[\r\n]+The information appearing in this document", RegexOptions.Multiline)?.Groups[1].Value;
    

    正则表达式详细信息

    • (?&lt;= - 正向后视的开始,要求其模式立即匹配当前位置的左侧:
      • ^ - 一行的开始(由于RegexOptions.Multiline
      • \S+ - 一个或多个非空白字符
      • [\p{Zs}\t]+ - 一个或多个水平空格
    • ) - 回顾结束
    • \d+ - 一位或多位数字(如果您确定这将始终是非空白字符条纹,请使用 \S+
    • (?= - 正向前瞻的开始,要求其模式立即匹配到当前位置的右侧:
      • .* - 该行的其余部分(因为 . 与 LF 字符不匹配)
      • [\r\n]+ - 一个或多个 CR/LF 字符
      • The information appearing in this document - 文字文本
    • ) - 前瞻结束。

    【讨论】:

    • @davis 我现在将添加正则表达式解释
    • 第二个答案是我需要的!非常感谢!
    【解决方案2】:

    如果你插入

    \d+\s(\d+)
    

    这将捕获前导数字 (\d+),用空格 (\s) 与您要查找的数字 ((\d+)) 分隔,捕获在捕获组中,以便您可以轻松访问它。

    检查this online demo中的标签拆分列表

    【讨论】:

      猜你喜欢
      • 2014-08-25
      • 2020-05-26
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多