2017-06-29 88 views
1

這與類似文章略有不同,括號中有星號。 例如輸入:正則表達式在括號之間提取文本與星號配對

內容十分重要(*需要抓住這個文本*)尤達

我想Jennifers post可以改變這個,但我的嘗試都失敗了。

 //Regex regex = new Regex("\\((?<TextInsideBrackets>\\w+)\\)"); //original 
     Regex regex = new Regex("\\(\\*(?<TextInsideBrackets>\\w+)\\*\\)"); // my attempt 
     string incomingValue = "Autocycleprestartcase := 20; (* Yayitme ve Konveyoru bosaltabilir *)"; 
     string insideBrackets = null; 
     Match match = regex.Match(incomingValue); 
     if (match.Success) 
     { 
      insideBrackets = match.Groups["TextInsideBrackets"].Value; 
     } 

對此有何建議?

此外,我想從輸入行中刪除封閉的parethesis/asterisk對的文本。

所以上面的輸出會給我

內容十分重要尤達

和值

需要抓住這個文本

感謝

+0

其實,你應該使用https://stackoverflow.com/a/378447/3832970。 –

+0

@Wiktor,該答案適用於括號內的所有內容,但對於此要求,括號*需要*與星號配對。 –

+0

然後你接受了一個不正確的答案。 '[\ w] +'只能匹配一個或多個空格或字母/數字/'_'。你需要'@「\(\ *(。*?)\ * \)」' –

回答

1

將其更改爲

Regex regex = new Regex("\\(\\*(?<TextInsideBrackets>[\\w ]+)\\*\\)"); 
                ^^^^^^ 

,讓空間

+0

謝謝,托馬斯。你能告訴我如何刪除包含的文本和周圍的括號/星號對嗎? (見編輯) –

+0

使用Regex.Replace代替Regex.Match @SkippyVonDrake –

1

這裏是一個解決方案,使這兩個值,而重新使用動態模式:

string incomingValue = "Autocycleprestartcase := 20; (* Yayitme ve Konveyoru bosaltabilir *)"; 
string pattern = @"\(\*\s*(.*?)\s*\*\)"; 
string insideBrackets = Regex.Match(incomingValue, pattern).Groups[1].Value ?? string.Empty; 
Console.WriteLine(insideBrackets); // => Yayitme ve Konveyoru bosaltabilir 
Console.WriteLine(Regex.Replace(incomingValue, [email protected]"\s*{pattern}", string.Empty)); // => Autocycleprestartcase := 20; 

C# demo

花紋細節

  • \( - 字面*
  • \s* - - 字面(
  • \*(注意單個反斜槓用作串經由逐字字符串@""定義)0+空白字符(修整左邊的值)
  • (.*?) - 組1捕獲除換行符以外的零個或多個字符,儘可能少,直到後續子模式的第一次出現
  • \s* - 零個或多個空格
  • \*(右修整) - 字面*
  • \) - 字面)

要獲得第二值,你可以使用相同的模式,但在開始處添加\s*(零個或多個空格),用Regex.Replace(incomingValue, [email protected]"\s*{pattern}", string.Empty)完成什麼。

+0

感謝您的解釋!最終它會沉入。(mabye) –

+0

@SkippyVonDrake:我想我的回答完全涵蓋了你的問題。如果您對此解決方案有任何疑問或疑問,請告訴我。 –

+0

是的,你的答案更正確。爲了我的需要,我可以使用任何一種解決方案,因爲附上的文字總是字母。再次感謝。 –