我试图过滤掉一些基于正则表达式的文本,如手机*意味着我想要文本"电话亭","手机立方体"等.
但是当我给展位*时,它也选择了电话亭.它不应该选择它吗?这是代码,
string[] names = { "phone booth", "hall way", "parking lot", "front door", "hotel lobby" };
string input = "booth.*, door.*";
string[] patterns = input.Split(new char[] { ',' });
List<string> filtered = new List<string>();
foreach (string pattern in patterns)
{
Regex ex = null;
try
{
ex = new Regex(pattern.Trim());
}
catch { }
if (ex == null) continue;
foreach (string name in names)
{
if (ex.IsMatch(name) && !filtered.Contains(name)) filtered.Add(name);
}
}
foreach (string filteredName in filtered)
{
MessageBox.Show(filteredName);
}
Run Code Online (Sandbox Code Playgroud)
它显示"电话亭"和"前门".但按照我的标准,它不应该显示任何东西,bcoz没有字符串从展位或门开始.
我的正则表达式有问题吗?
如果要在字符串开头匹配,请使用 ^
因此,例如,如果您希望匹配从手机开始,然后包含字符,则可以执行以下操作
^phone.*
Run Code Online (Sandbox Code Playgroud)
^将匹配锚定到字符串的开头.
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |