Regex以拆分具有不同分隔符的字符串

本文关键字:分隔符 字符串 拆分 Regex | 更新日期: 2023-09-27 18:19:58

需要一些正则表达式帮助处理c#中的一些复杂字符串。

我的字符串是:

--【美国东部时间8月24日至14日11:58 PM(美国东部时间)Mickey Rahman】---------------评论1——【美国中部时间8月14日11:40 PM(美国中部时间

我想要的拆分是:

比赛1:

-[美国东部时间8月24日至14日下午11:58 Mickey Rahman]---------------评论1

第二场比赛:

-[美国东部时间8月24日至14日下午11:40 Mickey Rahman]---------------评论2

匹配3:

-[美国东部时间2014年8月22日下午11:51自动化用户]----------------测试3

我尝试过基于模式的Regex.Splitt()来匹配字符串和短划线(--),但问题是我也希望将其作为拆分的一部分。我可以给我字符串和实际注释的单独匹配,以及--string,但这样我会得到重复:

string input = "-- [AUG-24-14 11:58 PM (EDT)  Mickey Rahman] --------------Comment 1-- [AUG-24-14 11:40 PM (EDT)  Mickey Rahman] --------------Comment 2-- [AUG-22-14 11:51 PM (EDT)  Automation User] --------------TEST 3";
string pattern = "((?<=--)(.*)(?=--------------))";
string[] substrings = Regex.Split(input, pattern);    // Split on hyphens 
int i = 1;
foreach (string match in substrings)
{
    Response.Write("MATCH " + i.ToString() + ":" + string.Format("{0}", match) + "<br>");
    i++;
}

有了这个,我得到的输出是:

匹配1:--第二场比赛:【8月24日至14日下午11:58(美国东部时间)Mickey Rahman】第三场比赛:【8月24日至14日下午11:58(美国东部时间)Mickey Rahman】匹配4:---------------注释1--第五场比赛:【8月24日至14日下午11:40(美国东部时间)Mickey Rahman】第六场比赛:【8月24日至14日下午11:40(美国东部时间)Mickey Rahman】匹配7:---------------注释2--比赛8:[美国东部时间2014年8月22日下午11:51自动化用户]比赛9:[美国东部时间2014年8月22日下午11:51自动化用户]匹配10:---------------测试3

Regex以拆分具有不同分隔符的字符串

请尝试以下操作:

string input = "-- [AUG-24-14 11:58 PM (EDT)  Mickey Rahman] --------------Comment 1-- [AUG-24-14 11:40 PM (EDT)  Mickey Rahman] --------------Comment 2-- [AUG-22-14 11:51 PM (EDT)  Automation User] --------------TEST 3";
string pattern = @"(?=-- '[.+'])";
string[] substrings = Regex.Split(input, pattern).Where(_=>_.Length > 0).ToArray();    // Split on hyphens 
int i = 1;
foreach (string match in substrings)
{
    Console.WriteLine("MATCH " + i.ToString() + ":" + string.Format("{0}", match));
    i++;
}

输出

MATCH 1:-- [AUG-24-14 11:58 PM (EDT)  Mickey Rahman] --------------Comment 1
MATCH 2:-- [AUG-24-14 11:40 PM (EDT)  Mickey Rahman] --------------Comment 2
MATCH 3:-- [AUG-22-14 11:51 PM (EDT)  Automation User] --------------TEST 3

如果您对使用split方法感到满意,这就是我提出的解决方案。

String input   = @"-- [AUG-24-14 11:58 PM (EDT)  Mickey Rahman] --------------Comm--ent 1-- [AUG-24-14 11:40 PM (EDT)  Mickey Rahman] --------------Comment 2-- [AUG-22-14 11:51 PM (EDT)  Automation User] --------------TEST 3";
string[] parts = Regex.Split(input, @"(?<!'A)(?=-- *'[)");
int i = 1;
foreach (string m in parts) {
         Console.WriteLine("MATCH " + i + ":" + m); ++i;
}

输出

MATCH 1:-- [AUG-24-14 11:58 PM (EDT)  Mickey Rahman] --------------Comm--ent 1
MATCH 2:-- [AUG-24-14 11:40 PM (EDT)  Mickey Rahman] --------------Comment 2
MATCH 3:-- [AUG-22-14 11:51 PM (EDT)  Automation User] --------------TEST 3

工作演示