Regex для проверки, если "=" или "|" существует между (? <= P_MFG_PART_NUM \ =) и (? = \ | P | $) - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь определить, содержит ли строка "=" или "|" между разделителями (? <= P_MFG_PART_NUM \ =) и (? = \ | P | $). </p>

Я могу сопоставить все символы, используя это (? <= P_MFG_PART_NUM \ =) (. *?) ( ? = \ | P | $). Не уверен, как проверить, имеет ли внутренняя строка только "=" или "|". </p>

Типичная строка будет выглядеть ниже, и я пытаюсь определить = или |. Начало строки совпадения должно быть «P_MFG_PART_NUM =», а конец может быть «| P» или конец строки

X_MFG_PART_NUM = | X_MANUFACTURER_ID = | X_ORGANIZATION_ID = | X_INVENTORY_ITEM_N = ошибка = | P_MFG_PART_NUM = HEX, 1 / 2-13 X 4 IN THD = N C TP316-SS, ASTM A312 | Psdfsdfs

Регулярное выражение будет выполнено в. net.

Любая помощь по этому вопросу высоко ценится.

Спасибо

1 Ответ

1 голос
/ 16 января 2020

Сначала вы можете сопоставить все символы, за которыми не следует ни |P, ни конец строки $, используя жадный жетон подхода (?:(?!\|P|$).)*

Затем соответствует либо |, за которым не следует P, либо соответствует знаку равенства (?:\|(?!P)|=)

(?<=P_MFG_PART_NUM=)(?:(?!\|P|$).)*(?:\|(?!P)|=).*?(?=\|P|$)

По частям

  • (?<=P_MFG_PART_NUM=) Утверждение того, что слева is `P_MFG_PART_NUM =
  • (?: Группа без захвата
    • (?!\|P|$). Если то, что справа не является |P или концом строки, соответствует любому символу
  • )* Закрыть группу и повторить 0+ раз
  • (?: Группа без захвата
    • \|(?!P)|= Совпадение либо |, за которым не следует P, либо совпадение =
  • ) Закрыть группу
  • .*?(?=\|P|$) Совпадение как можно меньше и утверждение |P или конец строки справа

. NET Regex demo

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