为什么在正则表达式中被排除在单词边界之外

时间:2017-02-11 10:47:34

标签: regex

我有以下正则表达式:

\b[_\.][0-9]{1,}[a-zA-Z]{0,}[_]{0,}\b

我的输入字符串是:

  1. _49791626567342fYbYzeRESzHsQUgwjimkIfW
  2. .49791626567342fYbYzeRESzHsQUgwjimkIfW
  3. 我认为它匹配1.2.,但它只匹配第一个场景。你能帮我找到正则表达式中的错误吗?

1 个答案:

答案 0 :(得分:3)

单词边界是单词字符(字母,数字,下划线)与非单词字符或字符串的开头或结尾之间的边界。所以在dot(非单词字符)和字符串的开头之间根本没有单词边界。

在这种情况下,您可以使用锚点来表示字符串的开头,例如

case "/OpenNP":
{
    try
    {
        // where mainForm is a reference to the form
        // that contains the buttons, the main form that is shown
        mainForm.Invoke((Action)(() => Np.Show()));
    }
    catch (Exception ex)
    {
        Console.WriteLine("Form is not shown. " + ex.ToString());
    }       
}
break;   

您还可以使用for item in myStructArray { // changes copy of item, array is not altered item.property = newValue } for i in 0..<myStructArray.count { // this does what you need, changes the struct in the array myStructArray[i].property = newValue } ^[_\.][0-9]{1,}[a-zA-Z]{0,}[_]{0,}$ 量词来缩短正则表达式,并避免不必要的转义序列,如Toto

所示
*

您还可以使用lookahead和lookbehind(如果可用)来构建自定义边界。