gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:23:29 24 4
gpt4 key购买 nike

习惯这里的正则表达式。

我有一个结构为的文件

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)(.* )(.* )(.* )(.* )(.* )(".*") (".*")

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

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

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

我相信 (?:(.* )|(".*")) 表示匹配 .*".*" 以及 (.* )(".*") 末尾的 * 形成 (.* )*(".*")* 表示匹配 0 次或多次。这应该与我的工作正则表达式做同样的事情,不是吗?

想法?

编辑阅读完所有内容后,我只是尝试通过基于 (.) 或\"(.)\"进行捕获来缩短我的正则表达式,而不指定捕获发生的次数,这是不可能的。谢谢你!

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

最佳答案

  1. 如果您有一个由 * 或 + 重复的组,它仍然只会被采用一次 - 最后一次匹配时。唉,我们不得不多次写这样的组。
  2. 空格由\s完成
  3. (.*)\s(.*)\s(.*)\s(.*)\s(.*)\s"(.*)"\s"(.*)"

就够了。根据您的任务,您不得将 " 放入组中。您的正则表达式不起作用,将 " 和空格放入 arr[6] 和 arr[5] 中。

  • Example
  • 如果你想独立读取单词是否在“”中,并且单词之间的空格数量可以是任意,那么:

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

    确实,这是缩短的变体,这样我们就无法检查单词两侧是否存在“”。

    Example

    如果您确实想获取任意数量的单词,请使用 split() 函数,按空格 \\s? 进行分割,然后从元素中删除多余的 "和/或空格。

    here例如。

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

    关于java正则表达式用于按空格分隔或捕获 ""中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617399/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com