正则表达式未按预期进行评估

Posted

技术标签:

【中文标题】正则表达式未按预期进行评估【英文标题】:Regular Expression not evaluating as expected 【发布时间】:2014-04-15 14:19:16 【问题描述】:

我正在尝试评估以下代码,但它没有返回预期的结果。 使用字符串“CityName!!!”进行测试返回真而不是假。我的表达式应该只允许由字母和空格组成的字符串,任何长度,以字母开头。

protected bool isValidCityName(string cityName)
    
        Regex cityMatch = new Regex(@"^[a-zA-Z][a-zA-Z\s]+");

        return cityMatch.IsMatch(cityName);
    

谢谢

【问题讨论】:

请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。 【参考方案1】:

您的模式只是检查字符串以该模式开始。您需要包含一个结束锚 ($) 以确保匹配后没有尾随字符:

Regex cityMatch = new Regex(@"^[a-zA-Z][a-zA-Z\s]+$");

另外,您可能需要考虑使用IgnoreCase 选项:

Regex cityMatch = new Regex(@"^[a-z][a-z\s]+$", RegexOptions.IgnoreCase);

如果您需要您的应用程序支持其他语言/地区(例如魁北克),请使用Unicode categories:

Regex cityMatch = new Regex(@"^\pL[\pL\s]+$");

【讨论】:

像魅力一样工作。我知道大多数角色,但以前从未担心过主播。【参考方案2】:

尝试在末尾添加$

Regex cityMatch = new Regex(@"^[a-zA-Z][a-zA-Z\s]+$");

Example

现在,您的表达式只需要以这些字符开头的字符串。 ^ 表示字符串的开头,+ 表示一个或多个$ 表示字符串结束

这几乎与任何正则表达式解析器都是一样的。

【讨论】:

以上是关于正则表达式未按预期进行评估的主要内容,如果未能解决你的问题,请参考以下文章

NSpredicate 上的正则表达式未按预期工作

LDAP olcAccess 正则表达式未按预期工作

使用正则表达式查找命令未按预期工作

Grep 正则表达式未按预期工作

NLTK - nltk.tokenize.RegexpTokenizer - 正则表达式未按预期工作

js 正则表达式未按预期工作。未检测到换行符[重复]