首页 > 解决方案 > 拆分字符串时忽略空捕获

问题描述

我有一个字符串:

Ayy ***lol* m8\nlol"

我不想包括空捕获和生产:

["Ayy ", "**", "*", "lol", "*", " m8", "\n", "lol"]

我用这个正则表达式分割字符串:

/(?x)(\*\*|\*|\n|[.])/

这会产生:

["Ayy ", "**", "", "*", "lol", "*", " m8", "\n", "lol"]

标签: rubyregex

解决方案


这是您的正则表达式的简化版本,与删除空字符串的方法链接在一起-使用时不可避免地需要这样做String#split,因为在“***”中间有一个“空结果”:

string = "Ayy ***lol* m8\nlol"


string.split(/(\*{1,2}|\n|\.)/).reject(&:empty?)
  #=> ["Ayy ", "**", "*", "lol", "*", " m8", "\n", "lol"] 

与您的模式的一些差异:

  • 我删除了(?x); 这毫无用处。扩展模式对于忽略正则表达式中的空格和注释很有用 - 您在这里都没有这样做。
  • \*\*|\*可以简化为\*{1,2}(或者\*\*?如果您愿意)。
  • [.]技术上不错,但\.一个字符短了一个,在我看来显示了更清晰的意图。

推荐阅读