2016-07-09 2 views
1

У меня следующие случаиMatch пока с приоритетом

F:xxxx xxxx# 
F:xxxx xxxx 
  • если моя строка, которая приходит после F: заканчивается хэш вперед, я хочу, чтобы соответствовать до хэша
  • если моя строка Безразлично т»имеют хэш вперед он будет соответствовать до первого \ б

поэтому я придумал следующие 2 выражения

F:(.+?)(?=#) 
F:(.+?)(?=\b) 

Можно ли комбинировать оба выражения и придавать хешу более высокий приоритет, какую концепцию в регулярном выражении я должен искать?

ответ

2

Вы можете использовать условие if-else предоставленный регулярное выражение, как

^F:(?(?=.*#$).*$|\w*) 

Regex Разбивка

^ #Start of string 
F: #Match F: literally 
    (? #Conditional regex begin 
    (?=.*#$) #if-condition. # is in end of string 
    .*$ #if above is true match entire string 
    | 
    \w* #else match word character. You can use .+?\b also 
) 

Regex Demo

.net код

var pattern = "(?m)^F:(?(?=.*#$).*$|\\w*)"; 
var input = "F:xxxx xxxx#\nF:xxxx xxxx"; 
Regex rgx = new Regex(pattern); 
Match match = rgx.Match(input); 

while (match.Success) { 
    Console.WriteLine(match.Groups[0].Value.Trim()); 
    match = match.NextMatch(); 
} 

.net fiddle demo

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