2017-03-20 127 views
1

enter image description here我有包含像C#字符串搜索

string str="Option (A) and option ( B ) and (c )" 

如果空格字符串,我想搜索(A)(B)(C)位置和长度,我知道我可以使用string.replace(" ","")和搜索。

在这里,我知道(B)是有但由于空白空间我无法得到正确的索引和长度。

例如在这种情况下,我想​​应该返回22(我手动计算)。并同时获得长我的意思是我的计划应该知道这里(B)开始索引= 22和长度= 9(这里的(B)长度不是3,因为在字符串由于空格其增加至9

感谢

+0

为什么你不能使用'str.replace'? – NotTelling

+0

我必须使用该索引进一步在非编辑的字符串..如果我将使用str.replace它不会给正确的索引 – Ajeet

+0

您可能想要尝试正则表达式,使您可以搜索可选空白,如'\(\ w^* B \ W * \)'。 – juharr

回答

3

使用该正则表达式:

var str = "Option (A) and option ( B ) and (c )"; 
var matches = Regex.Matches(str, @"\([^()]*\)"); 
foreach (Match match in matches) { 
    Console.WriteLine("Value: {0}", match.Value); 
    Console.WriteLine("Position: {0}",match.Index); 
    Console.WriteLine("Length: {0}",match.Length); 
} 

参见C# demo

Match对象具有必要IndexLength属性哟你可以在获得所有比赛后进入。

的模式匹配在这里:

  • \( - 字面(
  • [^()]* - 零个或多个字符以外()
  • \) - 文字)

你可以调整它说,为了匹配(,0 +空格,一个字母,零个或多个空格和)使用@"\(\s*\p{L}\s*\)"

+1

真的很棒..谢谢 – Ajeet

+0

一切都很好,但如果我们想要搜索一些字符串(它可能是(A)或任何其他字符串foo)在其他字符串str? – Ajeet

+0

@Ajeet:目前的问题并没有真正包含圆括号内必须出现的要求,这就是为什么我提出了一个相当通用的模式。模式可以或多或少容易地进行调整,但应首先提供要求。 –