Ruby正则表达式匹配没有前导逗号的空格

时间:2017-11-15 22:04:15

标签: ruby regex

如何在没有前导逗号的情况下匹配空格?

我的用例是我想在没有前导逗号的情况下在空格上分割字符串,例如"id 10, 11"

3 个答案:

答案 0 :(得分:1)

您需要lookbehind regex

 'id 10, 11'.split(/(?<=[^,])[ ]/)

输出:

=> ["id", "10, 11"]

答案 1 :(得分:1)

不需要正则表达式,只需拆分两次:

"id 10, 11".split(",").first.split #=> ["id", "10"]

答案 2 :(得分:0)

您可以使用正则表达式

r = /(?<!,) /

其中显示“匹配一个空格前面没有空格”((?!,)负面的背后隐藏)。

"fe, fi, fo and fum".split r
   #=> ["fe, fi, fo", "and", "fum"]
"fe, fi,     fo\nand fum".split r
   #=> ["fe, fi, ", "", "", "", "fo\nand", "fum"]

如果有人希望打破一个或多个前面没有逗号的空格,请使用

r = /(?<!,) +/
"fe, fi,     fo\nand fum".split r
  #=> ["fe, fi, ", "fo\nand", "fum"]

要拆分一个或多个前面没有逗号的空白字符,请使用

r = /(?<!,)\s+/
"fe, fi,     fo\nand fum".split r
  #=> ["fe, fi, ", "fo", "and", "fum"]

首先执行String#lstrip可能是谨慎的。

r = /(?<!,)\s+/
" fe, fi,     fo\nand fum ".split r
  #=> ["", "fe, fi, ", "fo", "and", "fum"]
" fe, fi,     fo\nand fum ".lstrip.split r
  #=> ["fe, fi, ", "fo", "and", "fum"]

根据要求,可以改为接受@ elyvn的建议并撰写

r = /(?<=[^,])\s+/

其中显示“匹配一个或多个前面带逗号以外的字符的空白字符”((?<=[^,]) 正向后视)。

" fe, fi,     fo\nand fum ".split r
  #=> [" fe, fi, ", "fo", "and", "fum"]