включать все (включая "ок.") до следующего периода или запятую - PullRequest
1 голос
/ 12 февраля 2020

Я буду использовать синтаксис, используемый на regex101.com, но мой код находится в R.

, взять следующие строки:

a) LVEF estimated to be highly impaired (ca. 20 %). blabla
b) LVEF highly impaired. blabla

My regex

(?=LVEF)([^,|.]*)

возвращает

a) LVEF estimated to be highly impaired (ca
b) LVEF highly impaired

Могу ли я включить "ок." но исключить все остальные "."?

Спасибо!

1 Ответ

2 голосов
/ 12 февраля 2020

Если поддерживается положительный вид сзади (?<=, вы можете добавить дополнительную деталь для соответствия точке, если предшествует ca

\bLVEF\b[^.]*(?:(?<=ca)\.)?

Объяснение

  • \bLVEF\b Соответствие LVEF между границами слова
  • [^.]* Соответствие 0+ вхождений любого символа, кроме точки
  • (?: Группа без захвата
    • (?<=ca)\. Положительный взгляд сзади, подтвердите, что слева - ca, затем сопоставьте .
  • )? Закройте группу без захвата и сделайте ее необязательной

Regex demo

Редактировать:

Если вы хотите сопоставить (ca. 20 %), вы можете сопоставить любой символ, кроме точки или соответствует точке, утверждающей, что непосредственно слева находится ca

\bLVEF\b[^.]*(?:(?<=ca)\.[^.]*)?
  • \bLVEF\b Соответствует LVEF
  • [^.]* Соответствует 0+ вхождений любого символа, кроме точки
  • (?: Группа, не относящаяся к будущему
    • (?<=ca)\. Соответствует точке только в том случае, если ей предшествует ca
    • [^.]* Соответствует конечному 0+ вхождений любого символа, кроме объявления ot
  • )? Закрыть группу и сделать ее необязательной

Regex demo

...