我有一个.NET winform,其中包含一个可选择的(多选)RegexOptions
列表,用户可以选择零,一个或多个。他们也可以指定正则表达式模式并测试字符串。所以到目前为止我创建的Regex
对象没有选项:
Regex regex = new Regex(pattern);
这一切正常,我对测试值的正则表达式模式测试工作正常。但我无法弄清楚如何将选定的正则表达式选项字符串转换为RegexOptions枚举,然后传递给Regex的构造函数。它将被实例化的传统方式是这个(作为一个例子):
new Regex(@"\b(?<word>\w+)\s", RegexOptions.Compiled | RegexOptions.IgnoreCase);
因此,如果用户选择了字符串&#34; Compiled&#34;和&#34; IgnoreCase&#34;从列表框中,如何将这些字符串转换为枚举值RegexOptions.Compiled | RegexOptions.IgnoreCase
并将其转换为Regex构造函数?
答案 0 :(得分:1)
使用Enum.Parse。
你可以单独传递每个字符串并将它们|=
放在一起,或者你可以实际传递逗号分隔列表并一次性完成。
类似于:
var options = (RegexOptions)Enum.Parse(typeof(RegexOptions), "Compiled");
options |= (RegexOptions)Enum.Parse(typeof(RegexOptions), "IgnoreCase");
或(更好):
var options = (RegexOptions)Enum.Parse(typeof(RegexOptions), "Compiled,IgnoreCase");
更好的解决方案是将列表框绑定到枚举值并显示字符串值,然后您可以在不解析的情况下获取它们。