Regex 如何匹配至少有三个单词且可能包含部分分隔符的带分隔符的句子?

Regex 如何匹配至少有三个单词且可能包含部分分隔符的带分隔符的句子?,regex,pcre,Regex,Pcre,我需要匹配一个字符串,该字符串的两边用“,”或“:”分隔。 需要注意的是,句子本身可能包含“,”和“:”,我所说的句子至少指两个单词和一个空格 例如: test.wav,,200,,This is a test, or is it?::test 2.wav,,test 3.wav::I said: Do not do that,,error.wav 预期产出: [ { "groups": [], "match": "This

我需要匹配一个字符串,该字符串的两边用“,”或“:”分隔。 需要注意的是,句子本身可能包含“,”和“:”,我所说的句子至少指两个单词和一个空格

例如:

test.wav,,200,,This is a test, or is it?::test 2.wav,,test 3.wav::I said: Do not do that,,error.wav
预期产出:

[
  {
    "groups": [],
    "match": "This is a test, or is it?"
  },
  {
    "groups": [],
    "match": "I said: Do not do that"
  }
]
我试过:

一,

但这给了我:

[
  {
    "groups": [],
    "match": ",,200,,This is a test, or is it?::"
  }
]

  • 正确的方法是什么?

    您可以将此正则表达式与前向和后向条件一起使用:

    (?<=,,|::)\h*(?:(?!\S*(?:,,|::))\S+\h+){3}.*?(?=::|,,)
    

    (?您还可以使用一种模式来匹配至少两个后跟空格的单词,并为不必后跟空格的第三个单词匹配至少一个字符

    (?:,,|::)\h*\K(?:(?>[^\s,:]+|,(?!,)|:(?!:))+\h+){2,}(?:(?>[^\s,:]+|,(?!,)|:(?!:)))+(?=\h*(?:,,|::))
    
    解释

    • (?:,,;:)\h*\K
      匹配
      和可选空格,然后忘记使用
      \K
      匹配的内容
    • (?:(?>[^\s,:]+|,(?!,):(?!:)+\h+{2,}
      匹配至少两个不包含
    • (?:(?>[^\s,:]+|,(?!,):(?!:)+
      匹配一个至少包含一个字符的单词,该字符不包含
    • (?=\h*(?:,,;:)
      正向前瞻,断言可选空格后跟

    你能展示你的代码吗?匹配正则表达式如何获得JSON输出?我只是使用JSON作为显示输出的手段;它只是PCRE。是的,非常感谢。它工作得很好。我只是不想评论,因为它说不评论只是说谢谢,等等。
    [
      {
        "groups": [],
        "match": "200,,This is a test, or is it?::"
      },
      {
        "groups": [],
        "match": "test 2.wav,,test 3.wav::"
      }
    ]
    
    (?<=,,|::)\h*(?:(?!\S*(?:,,|::))\S+\h+){3}.*?(?=::|,,)
    
    (?:,,|::)\h*\K(?:(?>[^\s,:]+|,(?!,)|:(?!:))+\h+){2,}(?:(?>[^\s,:]+|,(?!,)|:(?!:)))+(?=\h*(?:,,|::))