2017-03-20 199 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:目前的問題並沒有真正包含圓括號內必須出現的要求,這就是爲什麼我提出了一個相當通用的模式。模式可以或多或少容易地進行調整,但應首先提供要求。 –