Lookbehind和lookahead正则表达式

meg*_*gas 0 ruby regex

我有这样的字符串:

期刊/ cl/SantoNR90 ::: Michele Di Santo :: Libero Nigro :: Wilma Russo :::Modula-2中程序员定义的控制抽象

我需要捕捉Michele Di Santo,Libero Nigro,Wilma Russo但不是最后一个.

这个正则表达式几乎匹配我需要的:

/(?<=::).*?(?=::)/
Run Code Online (Sandbox Code Playgroud)

但它有问题,它捕获了第三个冒号

str.scan(/(?<=::).*?(?=::)/) #=> [":Michele Di Santo", ...]
Run Code Online (Sandbox Code Playgroud)

如您所见,第一场比赛的开头有一个冒号.

如何解决这个正则表达式,以避免这第三个冒号?

Jus*_*gan 7

不要使用正则表达式.您需要做的就是拆分输入字符串:::,从结果数组中取出第二个字符串,然后将其拆分::.与正则表达式版本相比,代码更快,运行更​​快,更易于阅读.

编辑:代码:

str.split(':::')[1].split('::')
Run Code Online (Sandbox Code Playgroud)

在CodePad上运行:http://codepad.org/1BNNwoh6

  • `your_string.split(":::")[1] .split("::")` - 不是"那个"坏. (3认同)
  • 它比正则表达式更干净,更整洁,当你有一个可以简单地完成没有正则表达式的任务时,字符串操作通常(并不总是,但肯定是恕我直言)最佳实践. (3认同)