如何使用正则表达式从字符串中提取数字?

时间:2015-01-22 17:49:44

标签: c# regex

这个小小的挑战只是向我尖叫正常的表情,但到目前为止,我很难过。

我有一个包含两个数字的任意字符串。我需要提取这两个数字,这些数字将是n和m位长(n,m预先未知)。字符串的格式始终为

FixedWord[n digits]anotherfixedword[m digits]alotmorestuffontheend

第一个数字的格式为1.2.3.4(位数变化),例如5.3.205.3.10.15.4

第二个是更简单的' m'数字(例如252

例如"AppName5.2.6dbVer44Oracle.Group"

它呼喊模式匹配'因此"使用正则表达式提取"。任何人都可以进一步指导我吗?

TIA

5 个答案:

答案 0 :(得分:1)

以下模式:

(\d+(?>\.\d+)*)\w+?(\d+)

将匹配此:

AppName5.2.6dbVer44Oracle.Group
       \__________/   <-- match
       \___/     \/   <-- captures

Demo

并将捕获您在捕获组中感兴趣的两个值。

像这样使用:

var match = Regex.Match(input, @"(\d+(?>\.\d+)*)\w+?(\d+)");
if (match.Success)
{
    var first = match.Groups[1].Value;
    var second = match.Groups[2].Value;
    // ...
}

模式说明:

(           # Start of group 1
  \d+       # a series of digits
  (?>       # start of atomic group
    \.\d+   #   dot followed by digits
  )*        # .. 0 to n times
)
\w+?        # some word characters (as few as possible)
(\d+)       # a series of digits captured in group 2

答案 1 :(得分:0)

试试这个:

\w*?([\d|\.]+)\w*?([\d{1,4}]+).*

答案 2 :(得分:0)

您可以从以下内容开始:

^[a-zA-Z]+((?:\d+\.)+\d)[a-zA-Z]+(\d+).*$

我认为固定的单词只是由字母组成,而你想要匹配整个字符串。如果您愿意,可以将不在括号中的部分替换为实际固定的单词,或者根据需要更改字符集。我建议使用像https://regex101.com这样的工具来微调表达式。

答案 3 :(得分:0)

通过查找数字( ),然后在集\d中设置零个或多个*个数字或句点来指定匹配[\d.],使其保持基本状态(该集合为\ d-或 - 文字期间):

var data    = "AppName5.2.6dbVer44Oracle.Group";
var pattern = @"(\d[\d.]*)";

// Outputs:
// 5.2.6
// 44
Console.WriteLine (Regex.Matches(data, pattern)
                        .OfType<Match>()
                        .Select (mt => mt.Groups[1].Value));

每个匹配将是句子中的数字。因此,如果总数字集发生变化,模式将不会失败,并尽职地报告1到N个数字。

答案 4 :(得分:0)

只需查找数字,因为您只关心数字而不想检查整个输入字符串的语法。

Matches matches = Regex.Matches(input, @"\d+(\.\d+)*");
if (matches.Count >= 2) {
    string number1 = matches[0].Value;
    string number2 = matches[1].Value;
} else {
    // Less than two numbers found
}

表达式\d+(\.\d+)*表示:

  

\d+一个或多个数字   ( )*重复零次,一次或多次   \.\d+一个小数点(用\符号转义)后跟一个或多个数字。

  

\d一位数   ( )分组   +将表达式向左重复一次或多次   *将表达式重复到左边的零,一次或多次   \转义在正则表达式中具有特殊含义的字符   .任何角色(没有逃脱)   \.句点字符(“。”)。