我使用ruby的正则表达式来处理诸如
${1:aaa|bbbb}
${233:aaa | bbbb | ccc ccccc }
${34: aaa | bbbb | cccccccc |d}
${343: aaa | bbbb | cccccccc |dddddd ddddddddd}
${3443:a aa|bbbb|cccccccc|d}
${353:aa a| b b b b | c c c c c c c c | dddddd}
我想在每条管道之间得到修剪过的文本例如,对于上例的第一行,我想要得到aaa和bbbb的结果,对于第二行,我想要aaa、bbbb和ccc ccc。现在我已经编写了一段正则表达式和一段ruby代码来测试它:
array = "${33:aaa|bbbb|cccccccc}".scan(/\$\{\s*(\d+)\s*:(\s*[^\|]+\s*)(?:\|(\s*[^\|]+\s*))+\}/)
puts array
现在我的问题是
(?:\|(\s*[^\|]+\s*))+
部分不能创建多个组我不知道如何解决这个问题,因为我需要在每行的文本数量是可变的有人能帮忙吗? 最佳答案
在正则表达式中重复捕获组时,捕获组只存储与上次迭代匹配的文本。如果需要捕获多个迭代,则需要使用多个正则表达式(.NET是唯一的例外它的CaptureCollection
提供捕获组的所有迭代的匹配。)
在您的示例中,可以执行搜索并替换以将^\d+:
替换为空去掉字符串开头的数字和冒号然后调用split()
使用regex\s*\|\s*
将字符串拆分为由竖线分隔的元素。