2016-06-08 4 views
-1

У меня есть текст:RegEx матч строки между строкой и первой пустой строкой

Value1 
sub values1 
sub values1 

Value2 
sub value2 
sub value2 

Value3 
...and so on 

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

Value1 
sub values1 
sub values1 

Value1.addition 
sub value2 
sub value2 

Где я хочу, чтобы соответствовать один или другой, в моем примере просто Value1

Выход им ищет это

sub values1 
sub values1 
+0

Пожалуйста, вы можете обеспечить регулярное выражение, где вы получили Стю ck для того, чтобы найти проблему с вашим шаблоном и тем, какой язык/инструмент/язык регулярного выражения вы используете. –

+0

Что-то вроде [this] (https: // regex101.ком/г/iZ6uY9/4)? Получите группы 2 и 4. – ClasG

ответ

0

Это кажется работа в .NET:

"(?<=(\A|\n)Value1.*\n).*(\n.*)*?(?=\n\s*\n|\Z)" 
0

Это не будет t можно выбрать Value 1 над Value 1.addition, просто используя регулярные выражения, но вы можете сделать это довольно легко, используя простой оператор if на любом языке, который вы используете. Для вас должно работать следующее регулярное выражение.

/^(Value(\d+))(.*)$((?:\r?\n^.+$)*)\r?\n^$/gm 

При нанесении на ваш первый пример строки будут результаты:

group #1: Value1 
group #2: 1 
group #3: 
group #4: sub values1 
      sub values1 

group #1: Value2 
group #2: 2 
group #3: 
group #4: sub value2 
      sub value2 

Применяя это ваш второй пример строки имеет следующий результат:

group #1: Value1 
group #2: 1 
group #3: 
group #4: sub values1 
      sub values1 

group #1: Value1 
group #2: 1 
group #3: .addition 
group #4: sub value2 
      sub value2 

Теперь вы можете просто сравнить группа 2, проверьте, что группа 3 имеет значение или нет и действует соответственно.

0

В Python:

import re 

txt = ''' 
Value1 
sub values1 
sub values1 

Value1.addition 
sub value12 
sub value12 

Value2 
sub value2 
sub value2''' 

match1 = re.search('Value1\n([\s\S]*?)\n\n', txt) 
match1_addition = re.search('Value1\.addition\n([\s\S]*?)\n\n', txt) 
values1 = match1.groups()[0] + '\n' + match1_addition.groups()[0] 
print(values1) 

возвращает

sub values1 
sub values1 
sub value12 
sub value12 

Regex объяснение:

  • Value1\n: Посмотрите на текст, который начинается с Value1 с последующей новой линии
  • (...): соответствие группа, которая является содержание, которое мы хотим
    • [...]*?: ленивое соответствия, то есть, как несколько символов, как это возможно
    • [\s\S]: любые пробельные символы (пробел, табуляция, перевод строки) - \s - или не -whitespace характер - \S
  • \n\n: два перевода строки символов, представляющих собой пустую строку
Смежные вопросы