用于按空格分隔的java正则表达式或捕获“”中的内容

时间:2017-08-10 15:06:34

标签: java regex

习惯这里的正则表达式。

我有一个

结构的文件
word1 word2 word3 word4 word5 "word6" "word7"
word1 word2 word3 word4 word5 "word6" "word7"
word1 word2 word3 word4 word5 "word6" "word7"
...

我想捕捉到:

arr[0] = word1
arr[1] = word2
arr[2] = word3
arr[3] = word4
arr[4] = word5
arr[5] = word6
arr[6] = word7

我的正则表达式是:(?m)(.* )(.* )(.* )(.* )(.* )(".*") (".*")

现在我确信有一种更优雅的方式来写这个,我不必多次重复相同的序列。

我的理解是这样的应该有效吗?

(?:(.* )*|(".*")*)

我相信(?:(.* )|(".*"))表示匹配.*".*"以及*(.* )结尾处的(".*")形成{{1} }和(.* )*表示匹配0次或更多次。这应该与我的 工作正则表达式 没有相同的事情吗?

思想?

修改 在阅读完所有内容之后,我只是试图通过基于(。)或\“(。)\”捕获来缩短我的正则表达式而不指定捕获将发生的次数,这是不可能的。谢谢!

正确的正则表达式:(".*")*

1 个答案:

答案 0 :(得分:1)

  1. 如果您有一个以*或+重复的组,它仍然只会被采用一次 - 最后一次匹配时。唉,我们必须多次写这样的小组。
  2. 空间由\ s
  3. 完成
  4. \ S(。*)\ S(。*)\ S(。*)\ S \ S&#34(*)(*);&#34(*); \ S&# 34;(。*)"

  5. 就够了。根据你的任务,你不能把"分组。你的正则表达式不起作用,将"和空格带入arr [6]和arr [5]。

    1. Example
    2. 如果你想单独阅读单词,如果他们在""或者不是,单词之间的空格数可以是任意的,那么:

      [\s"]*(\w+)[\s"]+(\w+)[\s"]+(\w+)[\s"]+(\w+)[\s"]+(\w+)[\s"]+(\w+)[\s"]+(\w+)[\s"]*
      

      实际上,它是缩短的变体,因此我们无法检查是否存在""两边都是。

      Example

      如果你真的想要接受任意数量的单词,可以使用split()函数,按空格\\s?分割,然后修剪过多的"和/或元素的空格。

      例如,查看here

      仅通过正则表达式将行拆分为任意数量的组是不可能的,没有split()或类似的东西。