2014-12-17 2 views
-1

я следующую строкуКак извлечь эту часть строки с регулярным выражением

var tabContents = {"1":"<div class=\"ProductDetail\"><h2 class=\"h2_style\" style=\"margin: 0px 0px 15px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: normal; color: rgb(0, 102, 153); letter-spacing: 0.3px; font-size: 16px; text-align: center; font-family: 'Lucida Grande', sans-serif; font-style: normal; font-variant: normal; line-height: 16px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webv><\/div>","2":"","3":"","4":""}; 

Теперь я хотел бы получить эту часть

<div class=\"ProductDetail\"><h2 class=\"h2_style\" style=\"margin: 0px 0px 15px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: normal; color: rgb(0, 102, 153); letter-spacing: 0.3px; font-size: 16px; text-align: center; font-family: 'Lucida Grande', sans-serif; font-style: normal; font-variant: normal; line-height: 16px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webv><\/div> 

Так что часть начинается с "1":" и заканчивается ","2"

Как я могу получить строку между этими двумя точками маркировки?

C# .net 4.5

+1

Это JSON. Подумайте о его расшифровке. – pguardiario

+0

@pguardiario, что правильно, однако я бы хотел использовать regex на этот раз по определенным причинам. поэтому с любой передачей строки мне нужно заставить regex вести себя как строка и выводить результаты – MonsterMMORPG

ответ

3

захвата групп или lookarounds использования.

"1":"(.*?)","2" 

Используйте выше регулярное выражение и получить строку, которую вы хотите от индекса группы 1.

DEMO

ИЛИ

(?<="1":").*?(?=","2") 

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

  • (?<="1":") Положительный lookbehind, который утверждает, что совпадению должно предшествовать "1":".

  • .*? Нежелательное соответствие нулю или более вхождений любого символа.

  • (?=","2") Положительный опережения, который утверждает, что матч должен сопровождаться ","2"

DEMO

String input = @"var tabContents = {""1"":""<div class=\""ProductDetail\""><h2 class=\""h2_style\"" style=\""margin: 0px 0px 15px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: normal; color: rgb(0, 102, 153); letter-spacing: 0.3px; font-size: 16px; text-align: center; font-family: 'Lucida Grande', sans-serif; font-style: normal; font-variant: normal; line-height: 16px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webv><\/div>"",""2"":"""",""3"":"""",""4"":""""};"; 
Regex rgx = new Regex(@"""1"":""(.*?)"",""2"""); 
foreach (Match m in rgx.Matches(input)) 
Console.WriteLine(m.Groups[1].Value); 

Выход:

<div class=\"ProductDetail\"><h2 class=\"h2_style\" style=\"margin: 0px 0px 15px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: normal; color: rgb(0, 102, 153); letter-spacing: 0.3px; font-size: 16px; text-align: center; font-family: 'Lucida Grande', sans-serif; font-style: normal; font-variant: normal; line-height: 16px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webv><\/div> 

IDEONE

+0

например + - это специальный символ. Если он начинался с +, как бы я сделал регулярное выражение для обработки его как регулярной строки? – MonsterMMORPG

+0

используйте '\ +' для соответствия литералу '+' –

+0

ty для ответа. поэтому для любого специального символа мне нужно поставить \ перед ним? – MonsterMMORPG

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