我有一个在解析XML文档时收到的字符串:
"ListOfItems/Item[Name='Model/Id']/Price"
我需要通过分隔符拆分它 - “/”
String[] nodes = path.split("/")
,但有一个条件:
“如果在项目名称中存在反斜杠,如上例所示,我必须跳过此块并且不要拆分它。”
即在拆分必须获得下一个节点数组之后:
ListOfItems, Item[Name='Model/Id'], Price
如何使用正则表达式表达式?
感谢您的帮助!
答案 0 :(得分:3)
您可以使用此正则表达式进行拆分:
/(?=(?:(?:[^']*'){2})*[^']*$)
这个正则表达式基本上只拆分正斜杠/
,后跟偶数个单引号,换句话说,单引号内的/
不匹配分裂。
答案 1 :(得分:0)
一种方法是使用find
方法使用此模式,并检查最后一个匹配项是否为空。优点是您不需要添加额外的前瞻来测试字符串,直到每个可能的位置结束。您需要的项目位于捕获组1中:
\\G/?((?>[^/']+|'[^']*')*)|$
\G
是一个锚点,它匹配字符串的开头或上一个匹配后的位置。使用此方法强制所有匹配都是连续的。
(?>[^/']+|'[^']*')*
定义项目的可能内容:所有不是/
或'
的内容,或引号之间的字符串。
请注意,可以改进引号之间字符串的描述以处理转义引号:'(?>[^'\\]+|\\.)*'
(使用s
修饰符)
与$
的交替只是为了确保您已经解析了所有字符串直到结束。最后一场比赛的捕获组1必须为空。如果它为null,则表示全局研究已在结束之前停止(例如,在报价不平衡的情况下)