如何使用正则表达式读取字符串之间的第一组数字?
Posted
技术标签:
【中文标题】如何使用正则表达式读取字符串之间的第一组数字?【英文标题】:How to read first set of numbers between strings using regex? 【发布时间】:2021-10-20 17:51:49 【问题描述】:我有以下字符串,需要提取如下数字:
1) M123123123AD123 => 123123123
2) M1231231212MN23 => 1231231212
3) G12312312312DD => 12312312312
我目前正在使用"\d+[0-9]"
阅读它。如果在第二组字符之后有 1 个数字,则此方法效果很好。但是如果在第二个字符集之后有多个数字,上面的正则表达式字符串也会选择它们。例如,“M123123123AD123
”将给出123123123123
。但最后的 123 不应该在那里。
【问题讨论】:
我没有看到这个问题。这段代码工作得很好:var regex = new Regex(@"\d+[0-9]"); var input = "M123123123AD123"; var first = regex.Match(input).Value
。您应该在问题中发布您的代码。
您的正则表达式应该找到 2 个匹配项,而不是一个与所有数字匹配的项。但也许你想要"(?<=^[GM])\d+"
之类的东西用你期望的任何字母将它锚定到字符串的开头。
这将适用于上述示例:\d+[0-9](?=[A-Z])
。但根据之前的 cmets,使用您的版本并进行第一次匹配会更干净。
(这个适用于所有情况,例如M12312312AD2342KX4323:(?<=^[A-Z]*)\d+
)。这称为后视,前一个是前瞻。
我的回答对你有用吗?
【参考方案1】:
你想在两个字母之间得到一串数字。
你可以使用
(?<=[a-zA-Z])\d+(?=[a-zA-Z])
请参阅.NET regex demo。
或者,如果您想获取前导非数字字符之后的数字,请使用
(?<=^\D+)\d+(?=[a-zA-Z])
见this .NET regex demo。
在C#中,你可以使用Regex.Match
:
var result = Regex.Match(text, @"(?<=^\D+)\d+(?=[a-zA-Z])")?.Value;
正则表达式详细信息:
(?<=[a-zA-Z])
- 在当前位置之前,必须有一个 ASCII 字母(使用 \pL
匹配任何字母)
(?<=^\D+)
- 在当前位置之前,必须有字符串开头 + 任意一个或多个非数字字符(如果数字可以出现在字符串开头,请使用 \D*
)
\d+
- 一位或多位数字
(?=[a-zA-Z])
- 在当前位置之后,必须有一个 ASCII 字母(使用 \pL
匹配任何字母)。
【讨论】:
以上是关于如何使用正则表达式读取字符串之间的第一组数字?的主要内容,如果未能解决你的问题,请参考以下文章
关于linux的shell的正则表达式,如何在输入的变量一组字符中提取第一个非数字字符!求解答
redshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示
java 正则正则表达式问题“R8972 M192023(51.1.1)” 查找数据中包含R并且()内第一组数值大于50的数据