2015-05-20 2 views
3

У меня есть строка мне нужно разобрать с помощью Regex (или Match):Regex матч динамический шаблон

SomeTextHereThatIWantToIgnore: <First Month.104.yyyy-mm-dd> <Last Day.2.yyyy-mm-dd>" OR SomeTextHereThatIWantToIgnore: "<BadVerb.104>" 

Там может быть один, два или три строки (все в одной строке), что я хочу, чтобы разобрать. В каждом случае я хочу захватить все между «<» и «>».

Итак, в первом примере я хочу получить «First Month.104.yyyy-mm-dd» и «Last Day.2.yyyy-mm-dd». Во втором примере я хотел бы захватить «BadVerb.104».

Любые гуру-регги, которые могут показать мне, как это сделать?

ответ

0

Вы можете использовать следующие (с s модификатор для нескольких линии матчей):

(?s)(?<=&lt;).*?(?=&gt;) 

См DEMO

0

Try: &lt;[\s\S]*&gt;

[\ s \ S] захватывает любой символ пробела или любой символ без пробелов, так что вместе они будут захватывать что-либо между &lt; и &gt;.

См here

1

Основное регулярное выражение, чтобы получить текст внутри угловых скобок без фиксации скобок

(?<=<)[^>]+(?=>) 

Regex.Matches Используйте, чтобы получить свои матчи.

var matches = Regex.Matches(str, @"(?<=<)[^>]+(?=>)"); 
+0

Это работало для вас или вам нужна дополнительная помощь? –

0

Спасибо, stribizhev, я не знал о коллекции совпадений. Я в конечном итоге делает простой схеме:

[<]([^>]+) 

, то есть искать «<», а затем захватить все, что не является «>». Коллекция матчей - это та часть, которую я искал. Я повторил сборку Match и смог еще раз проанализировать полученную строку и получить то, что я хотел.

Благодаря Сами, Картику и Уокеру (это тоже выглядит просто).

+0

Отлично, тогда, пожалуйста, подумайте о том, чтобы принять и поддержать свой ответ, поскольку он вам оказался полезен. Это регулярное выражение в основном одно и то же, но нет смысла размещать '<' внутри символьного класса, поскольку он не является пространственным символом в .NET regex. –

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