匹配 match = Regex.Match(returnValue, @regex, RegexOptions.IgnoreCase);
上述代码行中的变量包含以下值:
返回值:“标签”
@regex : "[A-Z][a-z][a-z]"
我假设正则表达式函数匹配应该失败,因为单词“标签”有 3 个小写字母,而不是正则表达式变量显示的 2 个。但是,对于上述代码,match.Success 始终返回 true。
这真的让我很困惑,任何解释将不胜感激。谢谢!
更新:
这是我需要的更详细的解释。我正在尝试创建类似正则表达式生成器的东西。
用户输入 A
作为大写字母,a
作为小写字母,d
作为数字。现在,如果用户传递像 Tags
这样的词,我会检查传递的字符串以查看它是否符合用户指定的规则。
这是我目前的逻辑:
if (patternChars[strIndex] == 'A')
{
regexBuilder.Append("[A-Z]");
} else if (patternChars[strIndex] == 'a')
{
regexBuilder.Append("[a-z]");
} else if (patternChars[strIndex] == 'd')
{
regexBuilder.Append("\\d");
} else {
regexBuilder.Append(patternChars[strIndex]);
}
我猜这需要更改吗?
最佳答案
试试这个:
@regex : "^[A-Z][a-z][a-z]$"
解释:
$
匹配行尾,所以你的第三组会匹配小写的g
,但是后面还有额外的字符,导致$
不匹配。^
匹配行首,防止匹配字符串中间,例如guten Tag
或aaaAaa
这应该只匹配 Tag
,而不匹配 Tags
。但它也会匹配 Zag
、Aaa
等。pp. - 你真的想要那个吗?
第三次编辑: 你正在使用这一行:
Match match = Regex.Match(returnValue, @regex, RegexOptions.IgnoreCase);
为什么在进行区分大小写的匹配时忽略大小写?
供您编辑: 这取决于 - 当您的用户想要在字符串中找到它时,没关系。如果你想知道给定的字符串是否作为一个整体匹配,你需要在前面加上“^”并在末尾附加“$”。
关于c# - C# 中的意外 Regex.Match 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304288/