c# - 如果字符串格式匹配,则提取数字

标签 c# regex

我想检查输入字符串是否遵循某种模式,以及它是否确实从中提取了信息。

我的模式是这样的 Episode 000 (Season 00)。 00 是介于 0-9 之间的数字。现在我想检查这个输入 Episode 094 (Season 02) 是否匹配这个模式,因为匹配所以它应该提取这两个数字,所以我最终得到两个整数变量 94 & 2:

string latestFile = "Episode 094 (Season 02)";
if (!Regex.IsMatch(latestFile, @"^(Episode)\s[0-9][0-9][0-9]\s\((Season)\s[0-9][0-9]\)$"))
    return

int Episode = Int32.Parse(Regex.Match(latestFile, @"\d+").Value);
int Season = Int32.Parse(Regex.Match(latestFile, @"\d+").Value);

我检查整个字符串是否与模式匹配的第一部分有效,但我认为它可以改进。对于第二部分,我实际上提取了我卡住的数字,而我在上面发布的内容显然不起作用,因为它从字符串中获取了所有数字。因此,如果你们中的任何人都可以帮助我弄清楚如何只提取 Episode 之后的三个数字字符和 Season 之后的两个字符,那就太好了。

最佳答案

^Episode (\d{1,3}) \(Season (\d{1,2})\)$

捕获 2 个数字(即使长度为 1 到 3/2)并将它们作为一个组返回。 您可以走得更远,为您的群组命名:

^Episode (?<episode>\d{1,3}) \(Season (?<season>\d{1,2})\)$

然后调用他们。

使用组的示例:

string pattern = @"abc(?<firstGroup>\d{1,3})abc";
string input = "abc234abc";
Regex rgx = new Regex(pattern);
Match match = rgx.Match(input);
string result = match.Groups["firstGroup"].Value; //=> 234

您可以查看表达式的含义并对其进行测试here

关于c# - 如果字符串格式匹配,则提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49324260/

相关文章:

regex - sed:删除文件前 n 个字符内的十六进制字符

node.js - 为什么这些正则表达式不能与感叹号一起使用?

c# - UWP RichEditBox : How to enable HyperLinks for loaded RTF files (Document. LoadFromStream)

c# - 如何管理Windows Azure SQL数据库

c# - Postman - 找到多个与 Web Api 中的请求匹配的操作

java - 从单词列表中查找字符串,其中包含字符串中的某些字符

c# - 在 MVC 中使用 LocalDb 从 App_Data 文件夹中删除数据库时出现 "Cannot attach the file"错误?

c# - C# 中的 Google 网站站长工具 API

java - 正则表达式将字符串转换为 json 数组

c# - 正则表达式:保留未知子字符串