java - 使用正则表达式拆分字符串

时间:2011-03-19 16:04:24

标签: java regex string split

我需要在有逗号的位置拆分字符串,但这取决于逗号的放置位置。

作为一个例子

考虑以下事项:

C=75,user_is_active(A,B),user_is_using_app(A,B),D=78

我希望String.split()函数将它们分开:

C=75 

user_is_active(A,B) 

user_using_app(A,B)

D=78

我只能想到一件事,但我不确定它是如何在正则表达式中表达的。

括号内的字符/单词始终为大写字母。换句话说,我不会遇到user_is_active(a,b)

有办法吗?

3 个答案:

答案 0 :(得分:12)

如果您没有多个括号级别,则可以在开头)之前对逗号进行拆分,而不是关闭(

String[] splitArray = subjectString.split(
    "(?x),   # Verbose regex: Match a comma\n" +
    "(?!     # unless it's followed by...\n" +
    " [^(]*  # any number of characters except (\n" +
    " \\)    # and a )\n" +
    ")       # end of lookahead assertion");

您建议的规则将翻译为

String[] splitArray = subjectString.split(
    "(?x),        # Verbose regex: Match a comma\n" +
    "(?<!\\p{Lu}) # unless it's preceded by an uppercase letter\n" +
    "(?!\\p{Lu})  # or followed by an uppercase letter");

然后你会错过像

这样的文本中的分割
Org=NASA,Craft=Shuttle

答案 1 :(得分:0)

考虑使用解析器生成器来解析此类查询。例如:javaccantlr

答案 2 :(得分:0)

作为替代方案,如果您需要多个括号级别,则可以创建一个小字符串解析器来逐字符解析字符串。