开发者

java - split string using regular expression

开发者 https://www.devze.com 2023-02-17 16:58 出处:网络
I need to split a string where there\'s a comma, but it depends where the comma is placed. As an example

I need to split a string where there's a comma, but it depends where the comma is placed.

As an example

consider the following:

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

I'd like the String.split() function to separate them like this:

C=75 

user_is_active(A,B) 

user_using_app(A,B)

D=78

I can only think of one thing but I'm not sure how it'd be expressed in regex.

The characters/words within the brackets are always capital. In other w开发者_StackOverflow社区ords, there won't be a situation where I will have user_is_active(a,b).

Is there's a way to do this?


If you don't have more than one level of parentheses, you could do a split on a comma that isn't followed by a closing ) before an opening (:

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");

Your proposed rule would translate as

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");

but then you would miss a split in a text like

Org=NASA,Craft=Shuttle


consider using a parser generator for parsing this kind of query. E.g: javacc or antlr


As an alternative, if you need more than one level of parentheses, you can create a little string parser for parsing the string character by character.

0

精彩评论

暂无评论...
验证码 换一张
取 消