2014-08-28 2 views
0

Нужна помощь в регулярном выражении с некоторой сложной строкой в ​​C#.Регулярное выражение для разделения строк с различными разделителями

Строка у меня есть:

 
-- [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 

Раскол Я хочу это:

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

Я испробовал Regex.Split() на основе шаблона в соответствии с строкой с тире (-), но проблема в том, что я хочу, чтобы это тоже было частью разделения. Я в порядке с этим давая мне отдельные матчи для строки и фактический комментарий, наряду с - строки, но с этим я получаю дубликаты:

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++; 
} 

с этим, выход я получение:

 
    MATCH 1:-- 
    MATCH 2: [AUG-24-14 11:58 PM (EDT) Mickey Rahman] 
    MATCH 3: [AUG-24-14 11:58 PM (EDT) Mickey Rahman] 
    MATCH 4:-------------- Comment 1 -- 
    MATCH 5: [AUG-24-14 11:40 PM (EDT) Mickey Rahman] 
    MATCH 6: [AUG-24-14 11:40 PM (EDT) Mickey Rahman] 
    MATCH 7:-------------- Comment 2 -- 
    MATCH 8: [AUG-22-14 11:51 PM (EDT) Automation User] 
    MATCH 9: [AUG-22-14 11:51 PM (EDT) Automation User] 
    MATCH 10:-------------- TEST 3 
+0

При использовании метода split слишком сложно, попробуйте использовать метод «Матчи» с помощью якоря '\ G'. –

ответ

1

Пожалуйста, попробуйте следующее:

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 
1

Если вы довольны использованием метода 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 

Working Demo

+0

Работает по большей части - что происходит, если в комментарии есть «-» - вот так: «comm» - это способ, которым я могу расколоться на «-»? –

Смежные вопросы