0

我有一个关于 Java 中的 Regex 的快速问题(尽管其他语言可能相似)。

我想要做的是像这样转换一个字符串:

 How are you "Doing well" How well 10 "That's great"

//# I want the Regex in Java to match out all of the words, numbers, 
//# and things inside quotation marks. Ideally, I'd get something like this 

How
Are
You
"Doing Well"
How 
Well
10
"That's Great!"

我尝试使用的正则表达式如下:

String RegexPattern =   "[^"+           //  START_OR: start of line OR" 
                        "\\s" +         //  empty space OR
                        "(\\s*?<=\")]" + // ENDOR: preceeded by 0 or more spaces and a quotation mark 
                        "(\\w+)" +      // the actual word or number
                        "[\\s" +        // START_OR: followed by a space OR
                        "(?=\")" +      // followed by a quotation mark OR
                        "$]";           // ENDOF:  end of line

不过,这对我不起作用;即使是更简单的字符串!我花了很多时间在这里寻找类似的问题。如果我不需要引号,我可以使用拆分;但最终,这种模式会变得更加复杂,所以我需要使用正则表达式(这只是第一次迭代)。

我会很感激任何帮助;提前致谢!

4

3 回答 3

2

我不认为[ ]意味着你认为它意味着什么。在方括号内,^实际上是字符类的否定运算符。在开始这项任务之前,您应该练习使用较小的正则表达式。您正在寻找的模式更像是:

    \s*([^"\s]+|"[^"]*")

您可以在这里看到这一点:http ://rubular.com/r/enq7eXg9Zm 。

如果您不想要单词中的符号,那么最好使用第二个正则表达式来删除它们,例如

    \W
于 2012-05-31T19:08:13.857 回答
0

您可以分多个步骤完成(python 中的代码,但逻辑和模式应该相同)

1 - 获取双引号内的所有字符串:

r = re.findall(r'\"([^"]*)\"','How are you "Doing well" How well 10 "That\'s great"')

结果:['Doing well', "That's great"]

2 - 从文本中删除这些字符串:

r = re.sub(r'\"([^"]*)\"', "", 'How are you "Doing well" How well 10 "That\'s great"')

结果:'How are you How well 10 '

3 - 现在您可以进行拆分以及步骤 1 中双引号中的拆分。

绝对不是一个好的/干净的解决方案,但它应该可以工作。

于 2012-05-31T19:46:56.723 回答
0

这应该适合你。(\"[^\"]+\")|([^\s]+)

于 2012-05-31T19:51:31.027 回答