在C#中检测Python缩进开始

时间:2018-09-20 21:56:34

标签: c# regex

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

  1. foo->下一行没有缩进
  2. foo:->缩进
  3. foo: #bar->缩进
  4. foo: #bar:->缩进
  5. 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吗?谢谢!

1 个答案:

答案 0 :(得分:1)

实际上(至少在这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(":");