ruby - 拆分字符串时忽略空捕获
问题描述
我有一个字符串:
Ayy ***lol* m8\nlol"
我不想包括空捕获和生产:
["Ayy ", "**", "*", "lol", "*", " m8", "\n", "lol"]
我用这个正则表达式分割字符串:
/(?x)(\*\*|\*|\n|[.])/
这会产生:
["Ayy ", "**", "", "*", "lol", "*", " m8", "\n", "lol"]
解决方案
这是您的正则表达式的简化版本,与删除空字符串的方法链接在一起-使用时不可避免地需要这样做String#split
,因为在“***”中间有一个“空结果”:
string = "Ayy ***lol* m8\nlol"
string.split(/(\*{1,2}|\n|\.)/).reject(&:empty?)
#=> ["Ayy ", "**", "*", "lol", "*", " m8", "\n", "lol"]
与您的模式的一些差异:
- 我删除了
(?x)
; 这毫无用处。扩展模式对于忽略正则表达式中的空格和注释很有用 - 您在这里都没有这样做。 \*\*|\*
可以简化为\*{1,2}
(或者\*\*?
如果您愿意)。[.]
技术上不错,但\.
一个字符短了一个,在我看来显示了更清晰的意图。