我怎样才能打破这个字符串,只是捕获巧克力蛋糕&坚果?
输入字符串
披萨&焦炭>糖果>巧克力蛋糕&坚果>
我正在使用这个正则表达式:
.*[\>]\s(.*)
然而,它正在捕捉巧克力蛋糕&坚果> 如何删除>和最后的空间?
期望的结果 lastone =巧克力蛋糕&坚果
答案 0 :(得分:2)
答案 1 :(得分:2)
避免捕捉最后一个短语周围的空间有点棘手。在Java中,
.*>\s*(\S+(?:\s+[^>\s]+)*)\s*>.*
捕获除最后两个>
之间的初始和结束空白之外的所有内容。请注意,您只能在>
之间获得最后的内容,因为*
是"贪婪。"它匹配允许其余正则表达式匹配的最长字符串。
请注意,当您询问正则表达式时,您需要指定您正在使用的正则表达式引擎。
编辑:工作原理
.*>
匹配>
后跟的所有内容。然后\s*
匹配0个或更多的空白字符,并开始捕获。 \S+
匹配一个或多个非空格字符,(?:\s+[^>\s]+)*
匹配0个或更多个空格重复,后跟除>
和空格之外的任何字符(这是棘手的部分),然后捕获停止。 (?: )
括号的形式是非捕获的。它们只对内部的内容进行分组,因此*
可以匹配0或更多内容。最后,\s*>.*
匹配可选空格前面的最后>
,后跟任何内容。