如何将Python正则表达式转换为Java

0 投票
1 回答
739 浏览
提问于 2025-04-17 23:37

我需要把下面的Python正则表达式转换成Java正则表达式:

regexp = re.compile(r"^(?P<prefix>(%s)(%s)?)\s?\b(?P<name>.+)" %
                                ("|".join(array1),
                                 "|".join(array2)), re.IGNORECASE
                                                             | re.UNICODE)

这里的array1和array2是字符串数组。

我做的事情是:

String regexp = String.format("^(?<prefix>(%s)(%s)?)\\s?\\b(?<name>.+)", array1, array2);
regexpPattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);

但是我遇到了一个PatternSyntaxException错误,提示“在问号附近有未知的后向引用组”在(%s)(%s)?

我对这个问号不是很理解。

有没有什么建议可以帮我把它转换成Java 1.6的格式?

1 个回答

1

很多事情可能会出错。

(?< 是 Java 中的一个正向回顾表达式。

(?P<prefix> 是 Python 中的一个命名组,而在 Java 中没有命名组这个概念。

在 Java 中,使用 String.format%s 以及数组,不能像在 Python 示例中那样直接生成用 | 连接的字符串。

首先,你需要手动将数组中的字符串用 | 连接起来。然后,当你有了两个字符串后,可以这样做:

regexpPattern = Pattern.compile(String.format("^((?:%s)(?:%s)?)\\s?\\b(.+)", string1, string2));

在 Python 中的 prefix 组在 Java 中变成了组 1,而 name 组则是组 2。

撰写回答