我正在转换包含LIKE运算符的VBA代码,如
dim sToken as String
if sToken Like "(*,*)" then ...
Run Code Online (Sandbox Code Playgroud)
在所有情况下,模式仅使用匹配任何字符串(包括空字符串)的*通配符.VBA Like运算符只产生一个真/假结果,因此可以进一步解析随后的VBA代码,并在匹配时拔出匹配的子字符串.
如果有人可以提供C#片段来测试相同类型的简单通配符匹配,我将非常感激.如果片段也产生匹配的子串 - 甚至更好.
Jar*_*Par 10
有几个人建议正则表达式应该适用于这种情况.另一个选择是Like直接从C#代码使用VB 运算符.这可以通过调用Compiler helper来完成LikeOperator.LikeString.此函数位于VB运行时程序集Microsoft.VisualBasic.dll中,可从C#中使用.
using Microsoft.VisualBasic.CompilerServices;
...
if (LikeOperator.LikeString(sToken, "(*,*)")) {
...
}
Run Code Online (Sandbox Code Playgroud)
我不相信这个版本与VBA版本有100%的同等性,Like但它会非常接近,并且会与常见场景相匹配.
那么,这个特定的模式可以匹配
if (sToken.StartsWith("(") && sToken.EndsWith(")")
&& sToken.Contains(","))
Run Code Online (Sandbox Code Playgroud)
但一般来说,您可能会发现使用正则表达式更有意义.例如:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
Regex regex = new Regex(@"^\(.*,.*\)$");
Console.WriteLine(regex.IsMatch("x(a,b)")); // False due to the x
Console.WriteLine(regex.IsMatch("(a,b)x")); // False due to the x
Console.WriteLine(regex.IsMatch("(ab)")); // False due to the lack of ,
Console.WriteLine(regex.IsMatch("(a,b")); // False due to the lack of )
Console.WriteLine(regex.IsMatch("(a,b)")); // True!
Console.WriteLine(regex.IsMatch("(aaa,bbb)")); // True!
Console.WriteLine(regex.IsMatch("(,)")); // True!
}
}
Run Code Online (Sandbox Code Playgroud)
这里有模式注意事项:
MSDN "正则表达式语言元素"页面是.NET正则表达式的一个很好的参考.
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |