这与类似的帖子略有不同,因为括号与星号配对。 示例输入:
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
和值
需要抓住这个文本
由于
答案 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)
完成的操作。