2013-06-25 3 views
1
static void Main(string[] args) 
     { 
      int count = 0; 
      String s = "writeln('Helloa a') tung ('main')"; 
      String patern = @"\'+[\S+\s]*\'"; 
      Regex myRegex = new Regex(patern); 
      foreach (Match regex in myRegex.Matches(s)) { 
       Console.WriteLine(regex.Value.ToString()); 
      } 

     } 

При запуске он показываетRegularExpression C# как

'Helloa a') tung ('main' 

Я хочу не этого

Я хочу, чтобы распечатать

'Helloa a' 
'main' 

Можете ли вы мне помочь?

ответ

1

добавить ? после * сделать * нежадного

@"\'+[\S+\s]*?\'" 

http://rubular.com/r/tso5Uvc88v


REGEXPLANATION:

жадного оператор регулярного выражения будет принимать максимально возможную строку, которая может (между двумя одинарными кавычками, которая в вашем случае является полужирным.

WriteLn ('Helloa а ') дун (' главный')

не-жадные оператор будет принимать наименьшее возможное сечение, которое является то, что вы хотели.

сделать + или * не жадным, просто положите ? после него.

2

попробуйте использовать регулярное выражение:

@"\'[^']+\'" 

Это будет печатать:

'Helloa a' 
'main' 
+0

Большое спасибо –

0

Я понимаю, что вы только хотите, чтобы захватить что-нибудь внутри кавычек и скобок? Попробуйте следующее: \(\'(.+?)\'\)

1

Вы можете использовать ленивый квантификатор. Заменить * на *? как Сэм я предположить, что он, или использовать это решение:

@"\'(?>[^']+|(?<=\\)')*\'" 

, что позволяет кавычки экранированы.

Подробности

(?>   open an atomic group 
    [^']+  all that is not a quote one or more times 
    |   OR 
    (?<=\\)' a quote preceded by a backslash 
)    close the atomic group 
*    repeat the group zero or more times 

Дополнительная информация о атомных групп here.

+0

спасибо вам большое –