0

我的代码中有这一行:

Match match = Regex.Match(actualValue, regexValue, RegexOptions.None);

我有一个简单的问题。为什么在使用以下行检查成功含义时:

if(match.Success)

那么匹配成功并具有以下值:

实际值 ="G:1"

正则表达式值 ="A*"

实际似乎至少不适合我,所以我可能会错过一些东西......

我想要实现的只是接收一个实际值和一个正则表达式,并检查实际值是否符合正则表达式。我认为这就是我在那里所做的,但显然我没有。

编辑:另一个问题。有没有办法将 * 视为“任何字符”通配符?意思是 A* 是否有可能被视为 A 并且在它之后任何字符都是可能的?

4

4 回答 4

3

您的代码本身是正确的;你的正则表达式不是。

根据您对其他答案的评论,您正在寻找一个匹配任何以 A 开头的字符串的正则表达式,并且您假设 ' *' 表示“任何字符”。' *' 实际上的意思是“匹配前面的字符零次或多次”,因此您给出的正则表达式的意思是“匹配字符串的开头,后跟零个或多个 'A' 字符”,这将完全匹配任何内容。

如果您正在寻找与整个字符串匹配的正则表达式,但仅当它以 'A' 开头时,您要查找的正则表达式是^A.*. .正则表达式中的 ' ' 字符表示“匹配任何字符”。因此,这个正则表达式意味着“匹配字符串的开头,后跟一个 'A',然后是零个或多个其他字符”,因此如果它以 'A' 开头,它将匹配整个字符串。

但是,您已经拥有了整个字符串,所以这有点不必要 - 您真正想要做的就是回答“字符串是否以 'A' 开头?”这个问题。实现此目的的正则表达式就是“^A”。如果匹配,则字符串以“A”开头。

当然,需要指出的是,无论如何您都不需要正则表达式来确认这一点。如果这真的是你想做的所有事情(你可能只是整理了一个简单的例子,而你的实际场景更复杂),为什么不直接使用 StartsWith 方法呢?:

bool match = actualValue.StartsWith("A");
于 2012-08-02T08:57:20.983 回答
1

正则表达式匹配,因为A*意味着“查找0次或多次出现的 'A'”。它将匹配任何字符串。

如果您要查找任意数量的“A”,但至少要查找一个,请尝试A+改用。

于 2012-08-02T08:39:22.997 回答
1

查看评论,您似乎正在尝试匹配很多以 A 开头的字符串。如果它们被空格分隔,您可以使用以下命令找到所有字符串:

bool matched = Regex.IsMatch(actualValue, @"\bA\w+");

这匹配:“Atest flkjs Apple Ascii cAse”。

如果您只匹配一个字符串并且它以 A 开头并且没有空格:

bool matched = Regex.IsMatch(actualValue, @"^A\w+$");

这匹配“Apple”,但不匹配“Apple and orange”,因为第二个字符串有空格。

正如克里斯所指出的, * 不是您在正则表达式搜索中所指的通配符。您可以在regex-info找到一些信息来帮助您开始使用正则表达式。

于 2012-08-02T09:17:04.413 回答
0

Regex 在构造函数中采用正则表达式。您的案例可能是:

if(new Regex("A*").IsMatch(actualValue)
   //Do something

如果您对正则表达式不安全,请在此处尝试

于 2012-08-02T08:40:43.320 回答