正则表达式和多个多字符分隔符

Rob*_*ker 1 regex

假设您有以下字符串:

white sand, tall waves, warm sun
Run Code Online (Sandbox Code Playgroud)

编写一个与分隔符匹配的正则表达式很容易,Java String.split()方法可以使用它来为你提供一个包含标记"white sand","tall waves"和"warm sun"的数组:

\s*,\s*
Run Code Online (Sandbox Code Playgroud)

现在说你有这个字符串:

white sand and tall waves and warm sun
Run Code Online (Sandbox Code Playgroud)

再一次,分割令牌的正则表达式很容易(确保你没有得到"和"字里面的"和"):

\s+and\s+
Run Code Online (Sandbox Code Playgroud)

现在,考虑这个字符串:

white sand, tall waves and warm sun
Run Code Online (Sandbox Code Playgroud)

是否可以正确编写与正确分隔符匹配的正则表达式,允许您将字符串拆分为与前两种情况相同的标记?或者,可以编写一个与令牌本身匹配的正则表达式并省略分隔符吗?(逗号两侧的任何数量的空格或"and"一词都应视为分隔符的一部分.)

编辑:正如评论中指出的那样,正确的答案应该在输入字符串的开头或结尾处有效地处理分隔符.在理想的答案应该能够采取像"白色的沙滩,高大的海浪和温暖的阳光和"字符串,并提供这些准确的三个令牌:

[ "white sand", "tall waves", "warm sun" ]
Run Code Online (Sandbox Code Playgroud)

......没有 额外的空标记或 任何令牌的开头或结尾都有额外的空格.

编辑:有人指出使用String.split()是不可避免的额外空标记,所以这已被删除作为"完美"正则表达式的标准.


感谢大家的回应!我试图确保我对所有提供可行的正则表达式的人进行了投票,而这些正则表达式本质上并不重复.丹的答案是最强大的(它甚至处理",白色的沙子,高大的波浪和温暖的阳光",合理地说,在"波浪"这个词之后用奇怪的逗号放置),所以我将他标记为已接受的答案.nsayer提供的正则表达式紧随其后.

Dan*_*Dan 5

这应该是非常有弹性的,并在字符串末尾处理分隔符之类的东西(例如"foo and bar and")

\s*(?:\band\b|,)\s*
Run Code Online (Sandbox Code Playgroud)