У меня есть часть выражения соответствия регулярному выражению; Я застрял в той части, где мне нужно сопоставить символы и заменить их противоположным символом. Итак, если я получаю строку ввода <, я должен заменить ее на> и <= заменить на> = и наоборот .... но я не понимаю, как это сделать.
Я могу принять только строку, в которой есть один из этих допустимых операторов.
Пока это мое регулярное выражение:
(\w+)(\s)*([(?P<less><)?(?P<greater>>)?(?P<gEqual>>=)?(?P<lEqual><=]) .
(\s*)*(\w+)
^^ Проблема в том, что он не соответствует <= или> =
Это моя строка подстановки, которая, очевидно, не является полной, но я даже не могу заставить ее подменить часть проблемы:
\5\b<\b(?=>)\1
Также, Я использую regex101.com, чтобы проверить свои данные. Пожалуйста помоги!
a <b должно превратиться в b> a asda <= c должен превратиться в c> asda
Напишите парсер.





Я думаю, что это должно сделать трюк, чтобы соответствовать всем вашим операторам:
(?<less><(?!=))|(?<lEqual><=)|(?<greater>(?<!=)>)|(?<gEqual>=>)
Он использует отрицательный просмотр вперед, чтобы предотвратить захват оператора «меньше или равно» в группе захвата «меньше». Точно так же он использует отрицательный просмотр, чтобы предотвратить захват оператора «больше или равно» в группе захвата «больше чем».
AFAICT, по крайней мере, соответствует вашему примеру, как вы можете видеть на https://regex101.com/r/GvB7nA/1
Потрясающие! Соответствие проходит. Есть ли у вас какие-либо советы по замене условных выражений? Мол, если соответствует <do> или есть что попроще?
AFAIK вы не можете сделать это в самом регулярном выражении, вам нужно будет сделать это в своем коде, поскольку регулярные выражения только предоставляют вам логику для выполнения сопоставления, а не замены. Я не уверен, действительно ли вам нужны регулярные выражения для этого, как уже предлагал @ggorlen.
В зависимости от вашего языка, можете ли вы использовать настраиваемую функцию замены в сочетании с регулярным выражением или вместо него? Упрощенный пример на JS с использованием пары операторов:
"a < b asda <=c 6 > 3".replace(/([<>])/g, m => { return { ">": "<", "<": ">" }[m]; });