2010-09-17 1 views
1

Я не очень хорошо разбираюсь в регулярном выражении, поэтому я ищу помощь. Мне нужно получить контент между . и {.RegEx для данных между. и {

Пример:

.aaa { } 
    .bbb {} 
    ccc {} 
    ddd {} 
    eee {} 

Т.е. aaa и bbb в строке. Эти данные могут измениться, поэтому я хочу использовать для этого регулярное выражение. Благодарю.

Пробелы разрешены и разрешены новые линии. Это простой текстовый файл.

+1

'eee' не предшествует' .', но должно быть сопоставлено? – Kevin

+0

Вам не обязательно быть regex- * god *, чтобы использовать его. :) –

+0

@ Kevin, Нет, его не следует сопоставлять –

ответ

5
(?<=\.)[^{]*(?=\{) 

будет соответствовать все между . и {.

Пояснение:

(?<=\.) утверждает, что предыдущий символ является точка. [^{]* соответствует нулю или нескольким символам, кроме {. (?=\{) утверждает, что следующий символ: {.

Чтобы перебрать все матчи в строке (C#):

Regex regexObj = new Regex(@"(?<=\.)[^{]*(?=\{)"); 
Match matchResults = regexObj.Match(subjectString); 
while (matchResults.Success) { 
    // matched text: matchResults.Value 
    // match start: matchResults.Index 
    // match length: matchResults.Length 
    matchResults = matchResults.NextMatch(); 
} 
+0

как я уже сказал, я просто хочу передать данные между ними. {Я не хочу включать ddd и ccc, поскольку они не имеют. при запуске –

+3

Да, и это то, что делает это регулярное выражение. Есть проблема? –

+0

мужчина его отлично работает..thanx много –

0

Вот попроще:

\.([^{]*)\{ 

Если вы не хотите пространства в результатах, использование это:

\.\s*([^{]*?)\s*\{ 

Пример использования:

foreach (Match match in Regex.Matches(input, @"\.\s*([^{]*?)\s*\{")) 
    Console.WriteLine(match.Groups[1].Value); 

Этот пример печатает «aaa» и «bbb» с учетом вашего ввода.

1

Мне, наконец, удалось взять все данные между ними. и {и создать список. Использование справки REGEX из stackoverflow. Я заменил все \ n, \ r, пробелы, заменив его пустым. Я немного изменил его в соответствии с моими потребностями. Это моя последняя функция, которая сработала фантастически.

public static void MakeList(string s) 
     { 

      string PATTERN = @"(?<=\.)[^{]*(?=\{)"; 

      s = s.Replace("\r", "").Replace("\n", "").Replace(" ",""); 
      var matches = Regex.Matches(s, PATTERN); 
      var styleList = new List<string>(); 


      for (int i = 0; i < matches.Count; i++) 
      { 

       styleList.Add(matches[i].ToString()); 
      } 
     } 
Смежные вопросы