regex 从C#中的字符串获取数字[关闭]

8dtrkrch  于 2023-04-22  发布在  C#
关注(0)|答案(1)|浏览(151)

已关闭,此问题需要更focused,目前不接受回答。
**要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

17小时前关闭
Improve this question
我有一个字符串标记,如PECVD_XL_XT_6_1_B9_PATCH.3
我想从这个标签中获取发行版、版本号和补丁号
输出为Release is 6_1 Build is 9 Patch is 3
补丁不强制出现在标记中,标记只能
PECVD_XL_XT_6_1_B9
PECVD_XL_XT_可以相同,也可以随字符串而变化
我正在尝试下面的方法,但似乎这样的长度和不有效。

string input = "PECVD_XL_XT_6_1_B9_PATCH.2".ToLower();
Regex re = new Regex(@"\d+");
Match m = re.Match(input);

string s = input.Substring(m.Index);

int batchIndex = s.IndexOf('B');

string[] releaseBuildPatchArray = s.Split('b');

有没有人能提出其他的解决办法?

bwleehnv

bwleehnv1#

你可以使用字符串方法来使用这种方法:

string input = "PECVD_XL_XT_6_1_B9_PATCH.2".ToLower();
 List<string> tokens = input.Split('_').ToList();
 int buildIndex = tokens.FindIndex(s => s.StartsWith('b') && s.Substring(1).All(char.IsDigit));
 if(buildIndex >= 2)
 {
    List<string> releaseParts = tokens.GetRange(buildIndex - 2, 2);
    string release = string.Join("_", releaseParts);
    string build = tokens[buildIndex].TrimStart('b');
    int patchIndex = input.LastIndexOf('.');
    string patchNumber = patchIndex >= 0
        ? input.Substring(++patchIndex) : null;
 }

https://dotnetfiddle.net/uICrMg

相关问题