Как собрать разные выражения в одной группе - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу обнаружить строки, которые:

  • начинаются с "-"

ИЛИ

  • Содержит = или <</strong> или > и после строки обязательно: значение ( , )

ИЛИ

  • Содержит SN

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

BLOC3_ETAPE1=

U36_B1=

Вы найдете мой тест здесь: https://regex101.com/r/DFHmce/1

^(-.*|.*[<>=](?:(\s*)|(?:(?!\s*$).+[(](?:.*)[,](?:.*)[)](?:.*)))|(?:.*SN.*))$

Ожидаемый результат строк в той же группе:

TEST APPARTEMENT
S1=32.319156K(0.5M,37.5K)R 
S4<9.782835K(9.5K,10.5K)R 
S5>9.782835K(2.5K,10.5K)R 
U36_B1=
U6%=SN54LS02J
BLOC3_ETAPE1=
U9%=SN54LS273J  TestPos

1 Ответ

2 голосов
/ 29 апреля 2020

Вы можете использовать чередование с 4 частями.

^(?:-.*|.*?SN.*|[^\r\n=<>]*[=<>].*?\([^,\r\n]+,[^,\r\n]+\)|[^\r\n_]+_[^\r\n_]+=$).*

4 части будут совпадать:

  • ^ Начало строки
  • (?: Группа без захвата с 4 альтернативами
    • -.* Совпадение - и остальная часть строки
    • | Или
    • .*?SN.* Совпадение строки, содержащей SN
    • | или
    • [^\r\n=<>]*[=<>] Совпадение до любого из < = или >
    • .*? Совпадение с любым символом, кроме новой строки, как как можно меньше
    • \([^,\r\n]+,[^,\r\n]+\) Совпадение ( 1+ символов, кроме запятой или новой строки. Совпадение , и снова 1+ символов, кроме запятой или новой строки и закрывающего )
    • | Или
    • [^\r\n_]+_[^\r\n_]+=$ Сопоставить деталь с подчеркиванием, заканчивающимся на =
  • ) Закрыть группу
  • .* Совпадение с остальной частью строки

См. Демонстрационный пример regex

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