用正则表达式遍历括号

时间:2019-05-09 08:47:18

标签: regex regex-group

正则表达式可提取所需结果的99%。

这是我的台词:

  

客户服务代表(CS)(TM PM *)**

  1. *可以有更多参数。示例(TM PM TR)等

  2. **可以带有更多的括号。示例(TM PM)(RI)(AB CD)等

除了第一个括号(CS in this case)是第1组外,我在第2组中可以具有任意数量的括号和这些括号内的任意参数。

我的尝试产生了预期的结果,但带有括号

(\(.*?\))\s*(\(.*?\).*)

我的结果:

enter image description here

我想要的结果:

group 1 : CS
group 2 : if gg yiy rt jfjfj jhfjh uigtu

我需要帮助从结果中删除那些括号。

我的尝试

\((.*?)\)\s*\((.*?\).*)

这给了我

enter image description here

有人可以帮我吗?我也需要从第2组中删除所有括号。我已经使用了很长时间,但找不到办法。谢谢。

2 个答案:

答案 0 :(得分:1)

您不能使用单个匹配操作来匹配不相交的文本部分。当您需要重复组时,甚至无法使用替换方法来捕获组。

您需要执行后处理步骤,以从第2组值中删除()

因此,在使用当前方法进行匹配之后,请使用

从第2组值中删除所有()

Group2value = Group2value.Replace("(", "").Replace(")", "");

答案 1 :(得分:0)

这是一种使用字符串拆分和基本字符串函数的方法:

string input = "(CS) (if gg yiy rt) (jfjfj) (jhfjh uigtu)";
string[] parts = Regex.Split(input, "\\) \\(");
string grp1 = parts[0].Replace("(", "");
parts[0] = "";
parts[parts.Length - 1] = parts[parts.Length - 1].Replace(")", "");
string grp2 = string.Join(" ", parts).Trim();

Console.WriteLine(grp1);
Console.WriteLine(grp2);

CS
if gg yiy rt jfjfj jhfjh uigtu