正则表达式中的正则表达式或匹配项中的模式或两个字符串之间的逗号

时间:2019-04-03 16:52:42

标签: regex

我要从此字符串中提取逗号,

"(""2018-10-15 00:00:00.571913"",147,55,2,341.920,-4.829,-1,""0,0,427799008,307238900,163872717,122358998,115140912,112840222,111386391,109396581,107696294,107176835,106021975,104275830,

但是我不想提取所有逗号,

只有位于"",,""之间的人

我尝试使用https://regexr.com/

(?="",)(\,)(?=,"")

代替

(?="",)(.*)(?=,"")

但是它不起作用。

此匹配输出应为: , , , , ,

换句话说,在子字符串"",147,55,2,341.920,-4.829,-1,""中,我只想提取逗号而不是其他任何内容。

PS:需要一步完成。

2 个答案:

答案 0 :(得分:0)

我将采取两步走法。

  1. 查找"",,""之间的内容。您已经接近了,但是除非在Matlab中与众不同,否则您的描述(?=)中有2个正面前瞻,而不是(?<=)之后有正面前瞻和正面前瞻。我会在Java中使用它:

    (?<=["]{2},)[0-9,.\\-]+(?=,["]{2})

因此,在模式之前先看正向,然后是模式(一个或多个逗号,句点,连字符和/或数字),然后在模式后再进行正向预测。这将产生:147,55,2,341.920,-4.829,-1

  1. 然后在此字符串中仅匹配逗号,并将它们全部收集起来。

答案 1 :(得分:0)

如果是用于MATLAB,则一步之遥就无法获得包含非连续字符的单个匹配项。但是,您可以尝试使用regexprep来删除不需要的部分,而不是使用regexp:

function testFunc()

    str = '"(""2018-10-15 00:00:00.571913"",147,55,2,341.920,-4.829,-1,""0,0,427799008,307238900,163872717,122358998,115140912,112840222,111386391,109396581,107696294,107176835,106021975,104275830,';

    middlePattern = '(?<=,).*?(?=,)';
    beginningPattern = '^[^,]*,';
    endPattern = ',".*?$';

    exp = [middlePattern '|' beginningPattern '|' endPattern];

    str = regexprep(str,exp,'')

>> testFunc

  str =

    ',,,,,'

我的解决方案不包含所需解决方案的空格。我无法解决这个问题。

您能否解释一下为什么要使用逗号列表以及最终目的是什么?