提取数字字符串的正则表达式

3

你好,我对正则表达式并不熟悉。我的目标是从输入字符串中提取一个数字子字符串(只包含0-9的数字)。

  • 要搜索的数字字符串应该仅在分号(;)、空格( )之后或者恰好位于输入(非行)的开头。
  • 要搜索的数字字符串仅应由分号(;)、行尾或输入字符串的结尾紧随。

示例输入:

;x; ;SrvId=3993;ad257c823; 435223;

输出:

435223

我尝试了代码:[ \A|;|[ ]]\d*[\r|;|\Z]但它没有工作,甚至没有编译。

5个回答

2
试试这个:
string resultString = null;
try {
    resultString = Regex.Match(subjectString, @"(?<=\A|\s+|;)(\d+)(?=$|;|\Z)").Groups[1].Value;
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

分解:

(?<=\A|\s+|;)

正向先行断言:输入的开头或至少一个空格字符或一个分号。

(\d+) 至少一个数字

(?=$|;|\Z)

正向后行断言:行末或分号或输入结尾。

输入:;x; ;SrvId=3993;ad257c823; 435223;

第1组输出:435223


@HasanKhan 您能否提供一个输入,使其匹配到不应该匹配的地方? - FailedDev
@FailedDev 当新的一行中有更多文本时,它不能匹配行末的数字。 - Muhammad Hasan Khan
@HasanKhan,我在原始问题的示例中没有看到任何换行符。你看到了吗? - FailedDev
@FailedDev:“被搜索的数字字符串应该仅跟随一个分号(;),行尾或输入字符串的结尾。” - Muhammad Hasan Khan
@HasanKhan,你可以写任何粗体字母,但这仍然无法改变OP帖子中没有新行的事实 :) 另外,如果我的英语没有欺骗我,行尾应该是字符串的最后一部分。 OP没有提到多个新行的可能性。 所以你错了 - 再次 :D - FailedDev

1

尝试使用这个正则表达式:

^(?:[; ]?)(?:.*?)([0-9]+);$

1

使用^.*[ ;](\d+)[;\n]?$可以捕获您感兴趣的数字,尽管您可能需要根据输入文件的行结尾将\n更改为\r\n。


0

正则表达式应该是这样的:

"[; ]{1}[0-9]+($|[^0-9]+)"

这将返回 435223;,其中包括分号。 - Simon Hughes

0

尝试使用这个表达式

(\d+\.?\d*|\.\d+)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接