2016-04-14 3 views
0

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

Я использую этот сайт для проверки: http://www.systemtextregularexpressions.com/regex.match

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

Учитывая пример строка:

"<div> \n [dont1.dont2|match1|match2] |dont3 [dont4] dont5. \n </div>" 

Ожидаемый результат будет коллекция:

match1, 
match2 

Ближайший я смог получить до сих пор:

(?!\[.*(\|)\])(?:\|)([\w-_.,:']*) 

Выше приведены значения, включая трубы, и dont3.

Я также попробовал этот парень:

\|(.*(?=\])) 

но он выводит:

|match1|match2 

ответ

1

Вот один из способов сделать это:

(?<=\[[^\]]*\|)[^\]|]* 

Вот смысл картины:

  • (?<=\[[^\]]*\|) - 'назад выражение, чтобы гарантировать, что любой матч должен быть которым предшествует открытая скобка, за которой следует любое количество символов с закрывающей скобкой, за которым следует символ трубы
    • (?<= ...) - Объявляет выражение lookbehind. То, что соответствует lookbehind, должно немедленно предшествовать тексту, чтобы он соответствовал. Однако часть, соответствующая lookbehind, не входит в итоговое соответствие.
    • \[ - Соответствует открытый характер кронштейн
    • [^\]]* - совпадает с любым количеством не-макро брекет символов
    • \| - Соответствует символу
  • [^\]|]* трубы - совпадает с любым количеством символов, которые не являются ни закрыть скобки и символы труб.

Жесткое изображение, поэтому оно позволяет использовать любое количество труб между открытой скобкой и соответствующим текстом.

+0

Это работает! Спасибо большое! – kkp91

+0

Нет проблем. Есть ли что-нибудь в этом, что вы не понимаете? Обычно я трачу время, чтобы объяснить, как работает шаблон, но я нахожусь на своем телефоне, так что это немного сложно. –

+0

Я был бы очень признателен, если вы получите шанс. – kkp91

0

try this:

\[.*?(?:\|(?<mydata>.*?))+\] 

Примечание: онлайн-инструмент будет только показать вам последний захват внутри квантифицированного() для данного совпадения, но .NET будет помнить каждый захват из группы, которая соответствует несколько раз

0

Попробуйте это:

^<div>\s*[^|]+|([^|]+)|([^|]+)

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