Regex, чтобы найти блоки текста между знаком $ - PullRequest
0 голосов
/ 30 августа 2018

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

$12.33  
1  
0000  
0000  
Some Text 1 line1  
Some Text 1 line2  
$0.00  
123A  
some Text 2  
$12.34  
000  
some text 3  
$90.33

Я хочу, чтобы мое регулярное выражение дало мне 3 блока.

block1 должно иметь:

1  
0000  
0000  
Some Text1  
some Text1  

block2 должен иметь:

123A  
Some Text 2  

block3 должен иметь

000  
Some Text 3  

Ниже приведено регулярное выражение, которое я написал:

(\$[0-9]{1,3}\.[0-9]{1,2})(?<Text>.*?)(\$[0-9]{1,3}\.[0-9]{1,2})

Регулярное выражение 1027 * возвращает мне блок 1 и блок 3. Как я могу получить блок 2 тоже?

Можно ли также получить немедленный блок текста?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Идея, если другие строки не содержат $ в начале строки для извлечения только части после цифровой строки. Он не проверяет, находится ли совпадение между двумя $ цифрами.

/^\$\d{1,3}\.\d{1,2}\h*\R\K(?:^[^$].+\R)+/m

См. Демонстрацию в regex101 (шаблон PCRE).


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

/^(\$\d{1,3}\.\d{1,2})(?:\h*\R((?:^.+\R)+?)(?=(?1)))?/m
  • (?1) - это вызов подпрограммы для шаблона первой группы для проверки между.

См. Еще одну демонстрацию в regex101 (также PCRE).

0 голосов
/ 30 августа 2018

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

(\$[0-9]{1,3}\.[0-9]{1,2})\s*(?<Text>.*?)(?=\$[0-9]{1,3}\.[0-9]{1,2}|$)
                                         ^^^                        ^^ 

См. Демоверсию regex .

Для положительного анализа (?=\$[0-9]{1,3}\.[0-9]{1,2}|$) требуется либо \$[0-9]{1,3}\.[0-9]{1,2} ($, от одной до трех цифр, ., одна или две цифры), либо (|) конец строки ($), который отображается сразу справа от текущего местоположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...