【发布时间】:2012-09-26 08:56:31
【问题描述】:
我正在寻找正确的正则表达式来为我提供以下结果:
- 需要将单引号/双引号括起来的单词分组
- 当字符串中没有其他单引号时,需要继续打印单引号
- 当没有被单引号/双引号包围时 - 按空格分隔
我目前有:
Pattern pattern = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
...但以下示例并不完全有效。 谁能帮我解决这个问题?
示例:
- 富吧
- group1: foo
- group2: 酒吧
- 说明:空间分割
- “富吧”
- group1: 富吧
- 说明:用双引号括起来,所以分组 foo 和 bar,但不要打印双引号
- '富酒吧'
- group1: 富吧
- 说明:同上,但用单引号
- '富酒吧
- group1: 'foo
- group2: 酒吧
- 说明:按空格分割并保留单引号
- "'富吧"
- group1: '富吧
- 说明:用双引号括起来,因此将 'foo 和 bar 分组并保留单引号
- 富酒吧'
- group1: foo
- group2: 酒吧'
- 富吧"
- group1: foo
- group2: 酒吧"
- “foo bar”“堆栈溢出”
- group1: 富吧
- group2:堆栈溢出
- “foo' bar”“堆栈溢出”怎么办
- group1: foo' 酒吧
- group2:堆栈溢出
- group3:如何
- group4:做
- group5:你
- 组6:做
【问题讨论】:
-
我发布了一个here,这可能是一个好的开始。它不处理单引号和逗号而不是空格,但它可能是一个好的开始。一个好处是它实际上是如何工作的。
-
谢谢,但是 Keppil 用户给了我正确的解决方案 :-)
-
Keppil 的解决方案涵盖了您的测试用例,但请注意,它不允许诸如“包含“引号”的字符串”之类的情况,但如果您不需要,那么很高兴认识您有答案。