我要从以下选项中选择word2
:
word2;word3
介于word2
和行首之间的 ;
,除非中间有=
。在这种情况下,我想从=
开始而不是从行的开始
就像来自
word2
word1=word2;word3
我尝试使用此正则表达式
(?<=\=|^).*?(?=;)
从中选择word2
word2;word3
还有整个word1=word2
的
word1=word2;word3
答案 0 :(得分:2)
您可以使用可选的组来检查单词,后跟等号并在第一个捕获组中捕获值:
^(?:\w+=)?(\w+);
说明
^
字符串的开头(?:\w+=)?
可选的非捕获组,匹配1个以上字符的字符,后跟=
(\w+)
在第一个捕获组中捕获1个以上的字符字符;
匹配;
在.NET中,您也可以使用:
(?<=^(?:\w+=)?)\w+(?=;)
答案 1 :(得分:2)
应该有很多选择,也许最后一个中有正则表达式。
但是,如果我们希望使用一个表达式来解决这个问题,让我们从一个简单的例子开始,探讨其他选项,也许类似于:
(.+=)?(.+?);
或
(.+=)?(.+?)(?:;.+)
第二个捕获组具有我们想要的word2
。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(.+=)?(.+?);";
string input = @"word1=word2;word3
word2;word3";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(.+=)?(.+?)(?:;.+)";
string substitution = @"$2";
string input = @"word1=word2;word3
word2;word3";
RegexOptions options = RegexOptions.Multiline;
Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);
}
}
答案 2 :(得分:0)
您可以使用String类方法解决问题,而不是使用常规表达式。
string[] words = str.Split(';');
string word2 = words[0].Substring(words[0].IndexOf('=') + 1);
第一行将行与';'分开。假设您只有一个';'该语句将您的行分为两个字符串。第二行从第一个出现的'='(words[0]
)字符的下一个字符(words[0].IndexOf('=')
)开始到末尾返回第一部分(+1
)的子字符串。如果您的行没有任何'='字符,那么它只是从头开始,因为IndexOf
返回-1。
相关文档: