我有一个多行字符串,比如说
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";
}
}
答案 0 :(得分:3)
*
运算符当前正在量化mySubstring
中的最后一个字母。您需要在运算符前面加.
来占用给定行上的其余字符。无需分组。
Match m = Regex.Match(myInput, "^" + mySubstring + ".*", RegexOptions.Multiline);
if (m.Success) {
// return m.Value
}
答案 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";
}