C#从特定单词开始获取多行String的行

时间:2015-08-01 08:38:07

标签: c# regex

我有一个多行字符串,比如说

abcde   my first line
fghij   my second line
klmno   my third line

所有这些都是一个字符串,但我现在要做的是获取以特定单词开头的字符串的内容(子字符串),例如" fghij"。所以,如果我做一个方法并通过" fghij"它应该让我回到我的第二行" fghij我的第二行"在那种情况下。

以下我试过,但不行,不幸的是m.Success总是假的:

String getLineBySubstring(String myInput, String mySubstring)
    {
        Match m = Regex.Match(myInput, "^(" + mySubstring + "*)", RegexOptions.Multiline);
        Console.WriteLine("getLineBySubstring operation: " + m.Success);
        if (m.Success == true)
        {
            return m.Groups[0].Value;
        }
        else
        {
            return "NaN";
        }
    }

4 个答案:

答案 0 :(得分:3)

*运算符当前正在量化mySubstring中的最后一个字母。您需要在运算符前面加.来占用给定行上的其余字符。无需分组。

Match m = Regex.Match(myInput, "^" + mySubstring + ".*", RegexOptions.Multiline);
if (m.Success) {
   // return m.Value
} 

Ideone Demo

答案 1 :(得分:2)

您几乎就在那里,只需将*字符更改为[^\r\n]+

即可
Match m = Regex.Match(myInput, "^(" + mySubstring + "[^\n\r]+)", RegexOptions.Multiline);

[^\r\n]+将匹配任何字符,但\r\n用于标记新行。

答案 2 :(得分:1)

尝试在您的正则表达式中添加行结尾$。同时*连接到mySubstring指定重复mySubstring中的最后一个符号,您应该.*来捕获所有可能的符号。

Regex.Match(myInput, "^(" + mySubstring + ".*)$", RegexOptions.Multiline);

答案 3 :(得分:1)

如果你需要检查字符串是否以某个子字符串开头,那么你应该避免使用正则表达式。只需将整个字符串拆分为行,然后使用StartsWith检查每一行。

String getLineBySubstring(String myInput, String mySubstring)
    {
        string[] lines = myInput.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
        foreach (var line in lines)
            if (line.StartsWith(mySubstring))
                return line;
        return "NaN";            
    }