gpt4 book ai didi

c# - 匹配字符串的 3 个特定位置的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:38 25 4
gpt4 key购买 nike

我一直在尝试寻找一种方法来获取字符串的 3 个部分,而无需使用拆分和一些奇怪的东西。目标字符串如下所示:

BLABLABLABLABLABLA BLABLABLA - BLABLA BLABLA (BLABLA1 BLABLA2)

我需要提取如下三部分:

1) BLABLABLABLABLABLA BLABLABLA(左边部分)

2)BLABLA BLABLA(中间部分)

3) BLABLA1 BLABLA2(括号内右边部分)

我现在所做的是:

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+\( - 匹配一个或多个空格后跟文字 (
  • ([^()]+) - 匹配除 () 之外的一个或多个任意字符,并在 group3 中捕获<
  • \)$ - 后跟文字 ) 和字符串结尾

Regex Demo

C# Code demo

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

var match = Regex.Match(text, @"^(.+)\s+-\s+(.+)\s+\(([^()]+)\)$");
Console.WriteLine("left: " + match.Groups[1].Value);
Console.WriteLine("middle: " + match.Groups[2].Value);
Console.WriteLine("right: " + match.Groups[3].Value);

打印,

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

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

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

Regex Demo with group3 being optional

Updated C# demo

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

var match = Regex.Match(text, @"^(.+)\s+-\s+(.+)\s+\(([^()]+)\)$");
Console.WriteLine("left: " + match.Groups[1].Value);
Console.WriteLine("middle: " + match.Groups[2].Value);
Console.WriteLine("right: " + match.Groups[3].Value);

text = "BLABLABLABLABLABLA BLABLABLA - BLABLA BLABLA";

match = Regex.Match(text, @"^(.+)\s+-\s+(.+?)\s*(?:\(([^()]+)\))?$");
Console.WriteLine("\nleft: " + match.Groups[1].Value);
Console.WriteLine("middle: " + match.Groups[2].Value);
Console.WriteLine("right: " + match.Groups[3].Value);

打印,

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

left: BLABLABLABLABLABLA BLABLABLA
middle: BLABLA BLABLA
right:

关于c# - 匹配字符串的 3 个特定位置的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55823981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com