我需要从给定的正则表达式中提取所有允许字符的列表。
例如,如果正则表达式看起来像这样(一些随机的例子):
[A-Z]*\s+(4|5)+
输出应为
ABCDEFGHIJKLMNOPQRSTUVWXYZ45
(省略空白)
一个明显的解决方案是定义一组完整的允许字符,并使用find
方法返回每个字符的相应子序列。这似乎是一个沉闷的解决方案。
有人能想到如何实现这个(可能是简单的)算法吗?
答案 0 :(得分:0)
你可以做的一件事是:
请参阅以下示例(尚不完美)c#:
static void Main(String[] args)
{
Console.WriteLine($"-->{TestRegex(@"[A-Z]*\s+(4|5)+")}<--");
}
public static string TestRegex(string pattern)
{
string result = "";
foreach (var subPattern in Regex.Split(pattern, @"[*+]"))
{
if(string.IsNullOrWhiteSpace(subPattern))
continue;
result += GetAllCharCoveredByRegex(subPattern);
}
return result;
}
public static string GetAllCharCoveredByRegex(string pattern)
{
Console.WriteLine($"Testing {pattern}");
var regex = new Regex(pattern);
var matches = new List<char>();
for (var c = char.MinValue; c < char.MaxValue; c++)
{
if (regex.IsMatch(c.ToString()))
{
matches.Add(c);
}
}
return string.Join("", matches);
}
哪个输出:
测试[A-Z]
测试
测试(4 | 5)
- &GT; ABCDEFGHIJKLMNOPQRSTUVWXYZ
? ? ???????? 45℃; -