gpt4 book ai didi

c# - C# 中的正则表达式字符串缩减器?

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:08 24 4
gpt4 key购买 nike

假设我有这个未知字符串:

var t = "G9906QZN-SXK9-TUCE-10F5-CB2C1DA9D24A.hello";

我需要以通用方式为该字符串生成一个正则表达式。

请注意,准确 字符串不是正则表达式,否则我会使用准确的字符。

换句话说:所有这 3 个都应该有相同的正则表达式:

G9906QZN-SXK9-TUCE-10F5-CB2C1DA9D24A.hello
G9906QZN-SXK9-TUCE-267F-F361D103A627.hello
G9906QZN-SXK9-TUCE-0360-370482E00155.hello

所有这 3 个也应该有相同的正则表达式:

G9906QZN^SXK9^TUCE^10F5^CB2C1DA9D24A.hello
G9906QZN^SXK9^TUCE^267F^F361D103A627.hello
G9906QZN^SXK9^TUCE^0360^370482E00155.hello

此外 - 可以有多个拆分器 - 它是一种随机模式生成的文件:

所以所有这 3 个也应该有相同的正则表达式:

G9906QZN^SXK9 TUCE[10F5-CB2C1DA9D24A.hello
G9906QZN^SXK9 TUCE[267F-F361D103A627.hello
G9906QZN^SXK9 TUCE[0360-370482E00155.hello

这就是我所做的:(现在忽略区分大小写)

代码:

var t = "G9906QZN-SXK9-TUCE-10F5-CB2C1DA9D24A.hello";

List<string> lst = new List<string>(); //stringBuilder can also be used.

foreach (char element in t)
{
if (char.IsDigit(element) || char.IsLetter(element))
lst.Add(@"\w");
else
lst.Add(@"\"+element); //escape all other

}
Console.WriteLine(string.Join( "",lst.ToArray()) );

结果:

\w\w\w\w\w\w\w\w\-\w\w\w\w\-\w\w\w\w\-\w\w\w\w\-\w\w\w\w\w\w\w\w\w\w\w\w\.\w\w\w\w\w

问题:

我想将该正则表达式“缩小”成类似这样的内容:

\w{8}\-\w{4}\-\w{4}\-\w{12}\.\w{5}

之前我开始做一些非常丑陋的事情,比如:第一次出现、最后一次出现和重置计数器,有没有更优雅的方式来做这件事?

最佳答案

你可以只使用正则表达式来生成它

var t = "G9906QZN-SXK9-TUCE-10F5-CB2C1DA9D24A.hello";

Console.WriteLine(Regex.Replace(Regex.Escape(t), @"\w+", m => @"\w{" + m.Length + "}"));

结果:

\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\.\w{5}

如果你想把 _ 当作分隔符,那么你应该使用 [\w-[_]] 而不是简单的 \w

Regex.Replace(Regex.Escape(t),
@"[\w-[_]]+", m => $@"[\w-[_]]{{{m.Length}}}");

关于c# - C# 中的正则表达式字符串缩减器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38815022/

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