如何将Python正则表达式转换为Java
我需要把下面的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。