正则表达式在括号与星号配对之间提取文本

时间:2017-06-29 13:46:44

标签: c# regex

这与类似的帖子略有不同,因为括号与星号配对。 示例输入:

   yada yada(*需要抓住此文*)yoda

我认为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 /星号对的文本。

所以上面的输出会给我

   yada yada yoda

和值

  

需要抓住这个文本

由于

2 个答案:

答案 0 :(得分:1)

将其更改为

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

允许空格

答案 1 :(得分: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, $@"\s*{pattern}", string.Empty)); // => Autocycleprestartcase := 20;

请参阅C# demo

模式详情

  • \( - 文字((注意单个反斜杠用作字符串是通过逐字字符串文字@""定义的)
  • \* - 文字*
  • \s* - 0+空格(修剪左边的值)
  • (.*?) - 第1组捕获除换行符之外的零个或多个字符,尽可能少,直到第一次出现的后续子模式
  • \s* - 零个或多个空格(从右边修剪)
  • \* - 文字*
  • \) - 文字)

要获取第二个值,您可以使用相同的模式,但在开头添加\s*(零个或多个空格),使用Regex.Replace(incomingValue, $@"\s*{pattern}", string.Empty)完成的操作。