正则表达式 - 从字符串中提取第二个位置数字

Posted

技术标签:

【中文标题】正则表达式 - 从字符串中提取第二个位置数字【英文标题】: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 之前的数字可能不同,因此不应允许 \d0,2)。

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

【问题讨论】:

【参考方案1】:

你可以使用类似的东西

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

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

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

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

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

见this regex demo。在 C# 中:

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

正则表达式详细信息

(?&lt;= - 正向后视的开始,要求其模式立即匹配当前位置的左侧: ^ - 一行的开始(由于RegexOptions.Multiline\S+ - 一个或多个非空白字符 [\pZs\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中的标签拆分列表

【讨论】:

以上是关于正则表达式 - 从字符串中提取第二个位置数字的主要内容,如果未能解决你的问题,请参考以下文章

php正则表达式字符串中提取数字,并截取其中的6位

使用正则表达式从字符串中提取数字和符号

从字符串中提取分数、小数和数字的正则表达式[关闭]

用于在数字之前从 csv 中提取字符串的正则表达式

使用java创建正则表达式以从字符串中提取4位数字

JavaScript 正则表达式 - 从单词旁边提取数字