Regex для анализа контрольного файла - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть контрольный файл, который выглядит следующим образом:

Package: com.jacobcxdev.idunnou
Name: iDunnoU
Depends: mobilesubstrate, preferenceloader, firmware (>= 13.0)
Architecture: iphoneos-arm
Description: Use this tweak to hide, secure, and block conversations like clockwork.
Maintainer: JacobCXDev <jacobcxdev@gmail.com>
Author: JacobCXDev <jacobcxdev@gmail.com>
Section: Tweaks
Version: 1.2.2
Tag: cydia::commercial, compatible::ios13
Icon: https://chariz.com/cdn/icon/idunnou/icon@3x.png
Depiction: https://repo.chariz.com/package/com.jacobcxdev.idunnou/

Мне нужно регулярное выражение для анализа каждой строки:

  • Имя поля
  • Содержимое поля

Значение поля должно игнорировать все, что находится в угловых скобках, например, Author: JacobCXDev <jacobcxdev@gmail.com> должно соответствовать следующему:

  • fieldName: Author
  • fieldContent: JacobCXDev

Пока у меня есть следующее регулярное выражение: (?<fieldName>.+):\s*(?<fieldContent>.*)\s*. Проблема в том, что он не игнорирует ничего в угловых скобках.

Спасибо.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Чтобы соответствовать первой части до :, вы можете использовать класс отрицательных символов [^

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

(?<fieldName>[^:\r\n]+):[^\S\r\n]*(?<fieldContent>.*?)(?:<[^<>\r\n]+>|$)

Пояснение

  • (?<fieldName> Именованная группа fieldName
    • [^:\r\n]+ Совпадение 1+ символов, отличных от : или новой строки
  • ): Закрыть группу и сопоставить :
  • [^\S\r\n]* Соответствует 0+ раз символу пробела за исключением новых строк
  • (?<fieldContent>.*?) Именованная группа fieldContent Соответствует 1+ символам за исключением символа новой строки, не жадного
  • (?: Группа без захвата
    • <[^<>\r\n]+> Совпадение < до > как минимум с 1 символом, отличным от новой строки или <> между
    • | или
    • $ Конец строки
  • ) Закрыть группу

Regex demo

Если поле не содержит угол раскрытия Le скобка:

(?<fieldName>[^:\r\n]+):[^\S\r\n]*(?<fieldContent>[^<\r\n]+)

Regex демо

0 голосов
/ 07 апреля 2020

Если после угловых скобок ничего нет, вы можете использовать: (?<fieldName>.+):\s*(?<fieldContent>[^<\n]+)\s* пример здесь: https://regex101.com/r/kzseNw/1

В противном случае вам нужно разделить регулярное выражение для содержимого поля в другой раздел и, возможно, больше, если могут существовать несколько угловых скобок. Например, о чем я говорю: Author: JacobCXDev <jacobcxdev@gmail.com> extra stuff here

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