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*(?:,,|::))