正则表达式 - 从字符串中提取第二个位置数字
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;
正则表达式详细信息:
(?<=
- 正向后视的开始,要求其模式立即匹配当前位置的左侧:
^
- 一行的开始(由于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中的标签拆分列表
【讨论】:
以上是关于正则表达式 - 从字符串中提取第二个位置数字的主要内容,如果未能解决你的问题,请参考以下文章