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.
精彩评论