Как Python проверяет строку регулярного выражения для Java?

#java #python #regex

#java #python #регулярное выражение

Вопрос:

В Pyhton можно использовать re.compile() для проверки строки регулярного выражения, а в Java можно использовать Pattern.compile()

Однако мой вариант использования заключается в том, что у меня есть две системы, и мне нужен Python для проверки строки, является ли она допустимой строкой регулярного выражения для Java. Существуют ли какие-либо пакеты, которые могут проверять разные языки, или способы преобразования регулярных выражений python в регулярные выражения Java, или вообще возможно распознать регулярные выражения Java в мире Python?

Большое спасибо

Комментарии:

1. Безумно, что вы спросили об этом сегодня, у меня точно такая же потребность. У меня есть скрипт на Python, который отправляет запросы в Amazon Athena / Presto, который использует регулярные выражения в стиле Java. Я хотел бы проверить выражения перед отправкой их в Athena.

2. У вас есть решение на данный момент? Было бы здорово, если бы вы могли поднять вопрос и надеяться, что кто-то испытал это

3. Я думаю, вам нужно написать свой собственный конвертер на Python. Вот шаблоны классов регулярных выражений для Java: docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html . Может быть, вы можете реализовать какую-то таблицу поиска (HashMap) в Pyhon для конвертера.

4. У меня нет решения. Я сомневаюсь, что есть что-то простое, что является правильным, кроме написания полноценного средства проверки синтаксического анализа, хотя это может быть проще с правильной библиотекой 3P. Мой вероятный план состоит в том, чтобы просто использовать средство проверки регулярных выражений python, поскольку регулярные выражения Python в основном являются подмножеством того, что поддерживает Java, и просто исключают использование более продвинутых регулярных выражений.

Ответ №1:

Очень поздно, но я недавно столкнулся с этой проблемой. Я решил это, используя py4j gateway для доступа Pattern.compile(regexString) .

 from py4j.java_gateway import *
port = launch_gateway()
gateway = JavaGateway(
gateway_parameters=GatewayParameters(port=port), callback_server_parameters=CallbackServerParameters(port=0))
pattern = gateway.jvm.java.util.Pattern
regex_string = "\K" # will raise an error
pattern.compile(regex_string)