从字符串

时间:2015-07-01 16:05:48

标签: c# .net regex split

我需要从字符串中提取值。

string sTemplate = "Hi [FirstName], how are you and [FriendName]?"

我需要返回的值:

  • FriendName

关于如何做到这一点的任何想法?

3 个答案:

答案 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(名字和姓氏),那么这将不起作用。