C# 在C中检测Python缩进开始#

C# 在C中检测Python缩进开始#,c#,regex,C#,Regex,我正在编写一段代码,以便在嵌入式Python编辑器中自动生成缩进,我正在努力检测所有用例 foo->下一行没有缩进 foo:->缩进 foo:#bar->缩进 foo:#bar:->缩进 foo#bar:->无缩进 到目前为止,我有: Match ColonMatch = Regex.Match(curLineText, @"((:)[^:]*|#.*:)\s*$"); if (ColonMatch.Success && (ColonMatch.Groups.Count == 3

我正在编写一段代码,以便在嵌入式Python编辑器中自动生成缩进,我正在努力检测所有用例

  • foo
    ->下一行没有缩进
  • foo:
    ->缩进
  • foo:#bar
    ->缩进
  • foo:#bar:
    ->缩进
  • foo#bar:
    ->无缩进
  • 到目前为止,我有:

    Match ColonMatch = Regex.Match(curLineText, @"((:)[^:]*|#.*:)\s*$");
    if (ColonMatch.Success && (ColonMatch.Groups.Count == 3) && 
       (ColonMatch.Groups[2].Value == ":"))
    {
        // indent on next line
    
    这适用于除第四种情况外的所有情况

    <>我不需要考虑C风格的注释或多行Python注释。 有人能帮我弄点时髦的regex foo吗?谢谢

    实际上(至少对于这5种情况),您不需要正则表达式:

    curLineText = curLineText.Trim();
    bool indent = curLineText.Contains("#")?
                  curLineText.Substring(0, curLineText.Length - 1).Contains(":"):
                  curLineText.EndsWith(":");
    
    更新: 我研究了python,
    #
    是用于注释的(我不知道),因此省略它会让我们知道它是否以
    结尾:
    。更简单的是:

    bool indent = curLineText.Split('#')[0].Trim().EndsWith(":");