gpt4 book ai didi

c# - 作为匹配的一部分返回常量值的正则表达式

转载 作者:行者123 更新时间:2023-11-30 14:44:23 24 4
gpt4 key购买 nike

我有一个正则表达式来匹配 2 种不同的数字格式:\=(?[0-9]+)\?|\+(?[0-9]+)\?

这应该返回 9876543 作为 ;1234567890123456?+1234567890123456789012345123=9876543?
;1234567890123456?+9876543? 的值我想要的是能够返回另一个值以及匹配的“值”。

因此,例如,如果第一个字符串匹配,我希望它返回:

值(value):9876543格式:长格式


如果在第二个字符串中匹配:

值(value):9876543格式:短格式


这可能吗?

最佳答案

如果您的实现支持命名组,另一个选项虽然不是您想要的解决方案,但可以节省您使用两个单独的正则表达式的时间。

这是一些 C#:

var regex = new Regex(@"\=(?<Long>[0-9]+)\?|\+(?<Short>[0-9]+)\?");
string test1 = ";1234567890123456?+1234567890123456789012345123=9876543?";
string test2 = ";1234567890123456?+9876543?";

var match = regex.Match(test1);
Console.WriteLine("Long: {0}", match.Groups["Long"]); // 9876543
Console.WriteLine("Short: {0}", match.Groups["Short"]); // blank
match = regex.Match(test2);
Console.WriteLine("Long: {0}", match.Groups["Long"]); // blank
Console.WriteLine("Short: {0}", match.Groups["Short"]); // 9876543

基本上只需修改您的正则表达式以包含名称,然后 regex.Groups[GroupName] 就会有一个值或不会。您甚至可以只使用该组的 Success 属性来了解匹配的 (match.Groups["Long"].Success)。

更新:可以从匹配中获取组名,代码如下:

static void Main(string[] args)
{
var regex = new Regex(@"\=(?<Long>[0-9]+)\?|\+(?<Short>[0-9]+)\?");
string test1 = ";1234567890123456?+1234567890123456789012345123=9876543?";
string test2 = ";1234567890123456?+9876543?";

ShowGroupMatches(regex, test1);
ShowGroupMatches(regex, test2);
Console.ReadLine();
}

private static void ShowGroupMatches(Regex regex, string testCase)
{
int i = 0;
foreach (Group grp in regex.Match(testCase).Groups)
{
if (grp.Success && i != 0)
{
Console.WriteLine(regex.GroupNameFromNumber(i) + " : " + grp.Value);
}
i++;
}
}

我忽略了第 0 组,因为它始终是 .NET 中的整个匹配

关于c# - 作为匹配的一部分返回常量值的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/544580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com