2015-10-30 72 views
1

我想检索由特定分隔符分隔的字符。从由分隔符分隔的字符串中检索特定字符

例子:

在这里,我想访问“”分隔符之间的字符串。但我想要“”之间的第二组字符。

abc"def"ghi"jklm // Output : ghi 

"hello" yes "world" // output : world 

我该怎么做到这一点? 我知道我们可以使用拆分。但有时字符串可能不“字开始。

任何人都可以请帮我这个?

+5

看起来没有模式。如果ghi为1st,那么它就是b/w第二和第三个引号。如果世界第二,它是黑白3和4的报价。似乎并不清楚“第二套字符”的含义。 –

+1

如果只有一个引号是分隔符,第二个输出应该是“是”,根据'但我想第二组字符' –

+1

即使在第一行中,第二个值是'def',而不是'ghi'。如果你想要*第三组字符 –

回答

0
string valueStr = "abc\"def\"ghi\"jklm"; 
var result = valueStr.Split('"')[2]; 
Console.WriteLine(result); 

https://dotnetfiddle.net/T3fMof

显然访问它们

+1

这通过第一个例子,但第二个失败。 –

+1

纠正我,如果我错了,但在第二个输出,这将返回'是',而不是OP所说的是'世界'。 –

+0

现在你的小提琴是正确的,但不是要求的输出。 –

0

您可以在退房前的数组元素只需找到第一个报价,并从那里使用你的方法:

var firstQuote = str.IndexOf('"'); 

var startsWithQuote = str.Substring(firstQuote); 
+1

有什么办法? OP没有办法。 –

+0

OP描述了他的问题,因为有时候没有“作为字符串中的第一个字符,因此使用string.Split()会为他做不同的事情,因此我给他提供了一种在” – lsedlacek

0

你可以用正则表达式来匹配它们:

 var test = "abc\"def\"ghi\"jklm"; 
     var test2 = "\"hello\" yes \"world\""; 

     var match1 = Regex.Matches(test, ".+\"(.+)\""); 
     var match2 = Regex.Matches(test2, ".+\"(.+)\""); 

     Console.WriteLine("Match1: " + match1[0].Groups[1].Captures[0]); 
     Console.WriteLine("Match2: " + match2[0].Groups[1].Captures[0]); 
     // Match1: ghi 
     // Match2: world