RegEx для сопоставления определенных символов - PullRequest
0 голосов
/ 06 июня 2019

Отделение текста вопроса от параметров вопроса.Как мне это получить?

Я пробовал, но это не очень хорошо работает:

 /(\d+)\.\s*([A-Z].*?)\s+([A-Z]\..*?)\s*[A-Z]|$)/s

Текст сообщения:

Whatti ..

Цель:

Какой рер?

A.Porce idge

B) Pl ge

C;Крепления Cla

D: Съемный частичный ламинарный протез для верхней челюсти

E: Swa part

A 7- паротит (паротит)

Это текст вопроса.Параметры в тексте вопроса указываются как (A, B, C, D, E ..).Я пытаюсь разграничить эти варианты вопросов.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Это не красиво, но это подойдет:

$text = "What denture construction would be optimal for this patient, considering his occupation as a lecturer? A.Porcelain-fused-to-metal dental bridge B)Plastic dental bridge C;Clasp-retained (bugel) removable partial denture with attachments D:Removable partial laminar denture for the upper jaw E.Swaged-soldered metal dental bridge with faceted intermediate part 13. A 7-year-old boy is diagnosed with epi- demic parotitis (mumps).";

$symbol = ":";
//Put whatever symbol you wish to use to create a more uniform output

$replacement = preg_replace("/((?:[A-Z]{1}|[0-9]{2}))((?:\\.|\\)|;|:))([ A-Z]{1})/", "\r\n$1{$symbol} $3", $text);

echo $replacement;

Будет выведено:

What denture construction would be optimal for this patient, considering his occupation as a lecturer? 
A: Porcelain-fused-to-metal dental bridge 
B: Plastic dental bridge 
C: Clasp-retained (bugel) removable partial denture with attachments 
D: Removable partial laminar denture for the upper jaw 
E: Swaged-soldered metal dental bridge with faceted intermediate part 
13:  A 7-year-old boy is diagnosed with epi- demic parotitis (mumps).

Предостережение, есть очень реальный шанс ложных срабатываний, потому что регулярное выражение довольно гибкое.

Возможно, вам лучше очистить ввод. Если бы я догадался, я бы догадался, что ваш ввод - задание на копирование / вставку в формате PDF. Посмотрите, можете ли вы импортировать больше форматирования из источника.

Демо: https://3v4l.org/h4OA9

0 голосов
/ 06 июня 2019

Если мы хотим обнаружить только три перечисленных символа, мы начнем с простого выражения, такого как:

(\.|\(|\))

Демо 1

Для желаемогоцель, наше выражение стало бы немного сложнее, мы могли бы начать с выражения, такого как:

([A-Z]\.|[A-Z]\)|[A-Z]:|[A-Z];|[0-9]+\.)

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

Демонстрация 2

Тест

$re = '/([A-Z]\.|[A-Z]\)|[A-Z]:|[A-Z];|[0-9]+\.)/m';
$str = 'What denture construction would be optimal for this patient, considering his occupation as a lecturer? A.Porcelain-fused-to-metal dental bridge B)Plastic dental bridge C;Clasp-retained (bugel) removable partial denture with attachments D:Removable partial laminar denture for the upper jaw E.Swaged-soldered metal dental bridge with faceted intermediate part 13. A 7-year-old boy is diagnosed with epi- demic parotitis (mumps).';
$subst = '\\n Option: $1 ';

$result = preg_replace($re, $subst, $str);

echo $result;

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

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