-3

将字符串中的所有字符串/单词包围为前导/尾随空格的模式是什么。

我可以使用string.split(" "),但它会将单''引号中的单词作为分隔单词返回。所以我的目标是获取所有单词,并将所有字符计''为一个单词。

示例字符串:

word1 word2 'somestring' word7 word91 'word2 with spaces' word5

我尝试的模式:

\s(.+)\s
4

5 回答 5

1

这应该适合您的需求:

'[^']+'|[^ ]+

正则表达式可视化

Debuggex可视化

RegExr上的演示

于 2013-09-02T06:52:42.017 回答
1

(\w+)|('[\w\s]+') 应该足以识别那种字符串。

如果您正在考虑一种将它们分开的模式(例如,与 一起使用split),如果可能的话,它可能会非常复杂。

于 2013-09-02T06:29:18.727 回答
1

如果你使用捕获组,你也许可以使用这个:

(\\w+)|'([^']+)'

如果你的话包含字母数字。

regex101 演示(注意我不需要在那里双重转义,但你必须在 java 中)

编辑:根据评论,要转义双单引号'',您可以使用此正则表达式:

'((?:[^']|'')+)'|(\\S+)

我将\\w+也更改\\S+为匹配任何其他字符,而不仅仅是字母数字。

于 2013-09-02T06:36:01.497 回答
0

对字边界 (\b) 使用零宽度断言而不是 \s 或 ',如下所示:

\b(\w+)\b

这将匹配由单词边界包围的一个或多个单词字符的所有运行。单词边界发生在单词和非单词字符之间,空格和撇号都可以作为非单词字符,字符串的开头和结尾也是如此。

这是正则表达式单词边界的一个很好的描述:http ://www.regular-expressions.info/wordboundaries.html

于 2013-09-02T06:57:57.437 回答
0

尝试这个:

str.split(" (?=(('[^']*){2})*[^']*)");

这将拆分后跟偶数个引号的空格。

于 2013-09-02T06:59:59.853 回答