我需要从字符串中提取值。
string sTemplate = "Hi [FirstName], how are you and [FriendName]?"
我需要返回的值:
关于如何做到这一点的任何想法?
答案 0 :(得分:2)
您可以全局使用以下regex:
\[(.*?)\]
说明:
\[ : [ is a meta char and needs to be escaped if you want to match it literally.
(.*?) : match everything in a non-greedy way and capture it.
\] : ] is a meta char and needs to be escaped if you want to match it literally.
示例:
string input = "Hi [FirstName], how are you and [FriendName]?";
string pattern = @"\[(.*?)\]";
Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
MatchCollection matches = rgx.Matches(input);
if (matches.Count > 0)
{
Console.WriteLine("{0} ({1} matches):", input, matches.Count);
foreach (Match match in matches)
Console.WriteLine(" " + match.Value);
}
答案 1 :(得分:0)
如果文本的格式/结构根本不会改变,并假设方括号被用作变量的标记,你可以尝试这样的事情:
string sTemplate = "Hi FirstName, how are you and FriendName?"
// Split the string into two parts. Before and after the comma.
string[] clauses = sTemplate.Split(',');
// Grab the last word in each part.
string[] names = new string[]
{
clauses[0].Split(' ').Last(), // Using LINQ for .Last()
clauses[1].Split(' ').Last().TrimEnd('?')
};
return names;
答案 2 :(得分:-1)
您需要对文本进行标记,然后提取条款。
string[] tokenizedTerms = new string[7];
char delimiter = ' ';
tokenizedTerms = sTemplate.Split(delimiter);
firstName = tokenizedTerms[1];
friendName = tokenizedTerms[6];
char[] firstNameChars = firstName.ToCharArray();
firstName = new String(firstNameChars, 0, firstNameChars.length - 1);
char[] friendNameChars = lastName.ToCharArray();
friendName = new String(friendNameChars, 0, friendNameChars.length - 1);
说明:
您标记术语,将字符串分隔为字符串数组,每个元素是每个分隔符之间的字符序列,在本例中是空格之间的单词。从这个单词数组我们知道我们想要第3个单词(元素)和第7个单词(元素)。但是,这些术语中的每一个都在最后都有标点符号。所以我们将字符串转换为char数组,然后转换为字符串减去最后一个字符,即标点符号。
注意:
此方法假定由于它是名字,因此只有一个字符串,以及朋友名称。我的意思是,如果这个名字只是Will,那就行了。但如果其中一个名字是Will Fisher(名字和姓氏),那么这将不起作用。