#regex
Вопрос:
Я хочу захватить любые строки, которые начинаются с NC или VSS, содержат _5 или заканчиваются _2 . ниже приведена та, которую я построил, но по какой-то причине она не работает
^(NC|VSS)(_5) (_2)$
для ввода CLKOUT_SRC_N_2
он не совпадает, несмотря на то, что заканчивается на _2.
Я изменил Reg Ex на ^(NC|VSS)|(_5) |(_2)$
«тогда CLKOUT_SRC_P_5
соответствует». Здесь _5 находится в конце строки. как мне изменить строку, если мне нужно _5
быть где-то в середине строки, так как в моем заявлении prob говорится, что не в конце?
Ответ №1:
Основываясь на приведенных вами примерах и объяснениях, я пришел к следующему регулярному выражению:
(^(NC|VSS)|. (_5). |(_2)$)
Это работает соответственно: https://regex101.com/r/SHFJhG/1
как мне изменить строку, если мне нужно, чтобы _5 был где-то посередине строки…
Я добавил .
сразу после и перед (_5)
, так что это гарантирует, что у нас должен быть по крайней мере один персонаж до и после появления _5
.
Ответ №2:
Основываясь на вашем описании, вы можете использовать:
^(?:NC|VSS)|(?<!^)_5(?!$)|_2$
Разрушение:
^(?:NC|VSS)
— Сопоставьте «NC» или «VSS» в начале строки.(?<!^)_5(?!$)
— Сопоставьте «_5», которое не находится ни в начале, ни в конце строки._2$
— Сопоставьте «_2» в конце строки.
Ответ №3:
Вы можете окружить _5
его 2 точками, чтобы слева и справа был по крайней мере один символ (точка соответствует любому символу, кроме новой строки), и использовать чередование |
для разделения совпадений.
^(NC|VSS)|.(_5).|(_2)$
Шаблон совпадает
^(NC|VSS)
Захватите либоNC
илиVSS
в группе 1 в начале строки|
Или.(_5).
Захват_5
в группе 2 окружен точкой, чтобы она не могла быть в начале или в конце строки|
Или(_2)$
Захват_2
в группе 3 в конце строки
Комментарии:
1. Разве для этого не нужно после . чтобы убедиться, что в середине строки есть хотя бы одно вхождение _5?
2. Нет, самой точки достаточно, чтобы убедиться, что она не в конце