C# 用于匹配字符串的3个特定位置的正则表达式

C# 用于匹配字符串的3个特定位置的正则表达式,c#,regex,C#,Regex,我一直在试图找到一种方法,在不使用拆分和一些奇怪的东西的情况下获得字符串的3个部分。目标字符串如下所示: BLABLABLABLABLABLA BLABLABLA - BLABLA BLABLA (BLABLA1 BLABLA2) 我需要提取以下三个部分: 1) 布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布

我一直在试图找到一种方法,在不使用拆分和一些奇怪的东西的情况下获得字符串的3个部分。目标字符串如下所示:

BLABLABLABLABLABLA BLABLABLA - BLABLA BLABLA (BLABLA1 BLABLA2)
我需要提取以下三个部分:

1) 布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉

2) 布拉布拉布拉布拉布拉布拉布拉(中部)

3) BLABLA1 bla2(括号之间的右侧部分)

我现在做的是:

var text = "BLABLABLABLABLABLA BLABLABLA - BLABLA BLABLA (BLABLA1 BLABLA2)";

var left = Regex.Matches(text, @"([^)]*)-");
var middle = Regex.Matches(text, @"-([^)]*)\(");
var right = Regex.Matches(text, @"\(([^)]*)\)");

Console.WriteLine(left[0]);
Console.WriteLine(middle[0]);
Console.WriteLine(right[0]);
输出:

BLABLABLABLABLABLA BLABLABLA -
- BLABLA BLABLA (
(BLABLA1 BLABLA2)

似乎可以工作,但输出包含分隔符,我只需要原始内容。

您可以使用这个正则表达式并从三个组中获取所有三个值

^(.+)\s+-\s+(.+)\s+\(([^()]+)\)$
说明:

  • ^
    -匹配输入的开始
  • (.+)
    -匹配并捕获任意字符一次或多次,并在空格和连字符前停止,然后放入group1
  • \s+-\s+
    -匹配空格,后跟连字符
    -
    ,然后再匹配空格,并将它们排除在任何组捕获的一部分之外,因为它们不是必需的
  • (.+)
    -匹配一个或多个字符的下一个序列,并在group2中捕获
  • \s+\(
    -匹配一个或多个空格,后跟文字
  • ([^()]+)
    -匹配除
    之外的一个或多个字符,并在组3中捕获
  • \)$
    -后跟literal
    和字符串结尾

印刷品

left: BLABLABLABLABLABLA BLABLABLA
middle: BLABLA BLABLA
right: BLABLA1 BLABLA2
left: BLABLABLABLABLABLA BLABLABLA
middle: BLABLA BLABLA
right: BLABLA1 BLABLA2

left: BLABLABLABLABLABLA BLABLABLA
middle: BLABLA BLABLA
right:
编辑: 根据您的评论,如果括号中包含的字符串的最后一部分是可选的,那么您可以使用这个正则表达式,其中第三组是可选的

^(.+)\s+-\s+(.+?)\s*(?:\(([^()]+)\))?$

印刷品

left: BLABLABLABLABLABLA BLABLABLA
middle: BLABLA BLABLA
right: BLABLA1 BLABLA2
left: BLABLABLABLABLABLA BLABLABLA
middle: BLABLA BLABLA
right: BLABLA1 BLABLA2

left: BLABLABLABLABLABLA BLABLABLA
middle: BLABLA BLABLA
right:

string.Split(new[]{'-','(','))
@the general missing
}
使用
Regex.Split(s,@“\s+-\s+\s+\([^()]+\)$”。其中(x=>!string.IsNullOrWhiteSpace(x))
能否请修改此正则表达式以匹配不包含正确部分的字符串,我刚刚注意到,可能会出现这种情况,有些字符串包含()及其他dont@AnonDev:当然,很简单。只需将
放在组的末尾,使该组成为可选组。让我更新我的帖子。