将字符串中的所有字符串/单词包围为前导/尾随空格的模式是什么。
我可以使用string.split(" ")
,但它会将单''
引号中的单词作为分隔单词返回。所以我的目标是获取所有单词,并将所有字符计''
为一个单词。
示例字符串:
word1 word2 'somestring' word7 word91 'word2 with spaces' word5
我尝试的模式:
\s(.+)\s
(\w+)|('[\w\s]+')
应该足以识别那种字符串。
如果您正在考虑一种将它们分开的模式(例如,与 一起使用split
),如果可能的话,它可能会非常复杂。
如果你使用捕获组,你也许可以使用这个:
(\\w+)|'([^']+)'
如果你的话包含字母数字。
regex101 演示(注意我不需要在那里双重转义,但你必须在 java 中)
编辑:根据评论,要转义双单引号''
,您可以使用此正则表达式:
'((?:[^']|'')+)'|(\\S+)
我将\\w+
也更改\\S+
为匹配任何其他字符,而不仅仅是字母数字。
对字边界 (\b) 使用零宽度断言而不是 \s 或 ',如下所示:
\b(\w+)\b
这将匹配由单词边界包围的一个或多个单词字符的所有运行。单词边界发生在单词和非单词字符之间,空格和撇号都可以作为非单词字符,字符串的开头和结尾也是如此。
这是正则表达式单词边界的一个很好的描述:http ://www.regular-expressions.info/wordboundaries.html
尝试这个:
str.split(" (?=(('[^']*){2})*[^']*)");
这将拆分后跟偶数个引号的空格。