C#获取以特定单词开头的多行字符串行

C#获取以特定单词开头的多行字符串行,c#,regex,C#,Regex,比如说,我有一个多行字符串 abcde my first line fghij my second line klmno my third line 所有这些都是一个字符串,但我现在要做的是获取这个字符串的内容(子字符串),它以一个特定的单词开头,例如“fghij”。因此,如果我执行一个方法并将“fghij”传递给它,在这种情况下,它应该返回“fghij我的第二行” 我尝试了以下方法,但没有成功,不幸的是,m.成功总是错误的: String getLineBySubstring(S

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

abcde   my first line
fghij   my second line
klmno   my third line
所有这些都是一个字符串,但我现在要做的是获取这个字符串的内容(子字符串),它以一个特定的单词开头,例如“fghij”。因此,如果我执行一个方法并将“fghij”传递给它,在这种情况下,它应该返回“fghij我的第二行”

我尝试了以下方法,但没有成功,不幸的是,m.成功总是错误的:

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";
        }
    }

您就快到了,只需将
*
字符更改为
[^\r\n]+

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

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

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

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

*
运算符当前正在量化
mySubstring
中的最后一个字母。您需要在运算符前面加上
,以消耗给定行上的其余字符。也不需要分组

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

如果需要检查字符串是否以某个子字符串开头,则应避免使用正则表达式。只需将整个字符串拆分为几行,然后用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";            
    }

你能给你的建议多加一点理由吗?(我也对好处感兴趣)只是简单。有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。正则表达式只是一种文本处理工具,所以在处理文本(检索当前问题中的一些表达式)时,最好使用专为这类任务设计的工具,而不是手动拆分字符串。(我不能说您的代码对于当前任务来说更糟糕,但避免使用正则表达式的建议是相当明确的)最好有其他方法来解决问题。我记得在大学里做过一个练习,使用Regex执行文本处理任务,这是明确不允许的。