ruby - 我可以使用什么正则表达式将字符串拆分为单词,但将短语放在圆括号中?

标签 ruby regex

我想像这样分割一个字符串:

my_string = "I want to split this (these should stay together) correctly"

结果如下:

["I", "want", "to", "split", "this", "(these should stay together)", "correctly"]

我试过这个:

my_string.split(/(?=[^\(]){1,} (?=[^\)]){1,}/)

但是圆括号内的元素被分开了。我怎样才能做到这一点?

最佳答案

split 在这里是错误的工具。使用扫描

my_string.scan(/\([^)]*\)|\S+/)
# => ["I", "want", "to", "split", "this", "(these should stay together)", "correctly"]

如果平衡括号可以与其他非空格字符相邻,您希望将它们放在一起,那么您可能需要这个,它更通用:

my_string.scan(/(?:\([^)]*\)|\S)+/)

通常,当分隔符可以用简单的模式表示时,使用split。当内容可以用简单的模式表达时,使用scan

关于ruby - 我可以使用什么正则表达式将字符串拆分为单词,但将短语放在圆括号中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273247/

相关文章:

ruby - Gsub 第一次失败,下一次有效吗?

arrays - Ruby——通过键将子数组的值添加到数组中

ruby-on-rails - Ruby - 如果变量不存在则返回默认值

php - LxWxH 的正则表达式测试模式

javascript - 正则表达式对非捕获组懒惰

css - 如何将数百个 CSS 文件转换为 SCSS 文件?

ruby - 在 Ruby 1.9 中按散列键的整数值对散列进行排序

PostgreSQL 正则表达式 'interval' 函数

php - PHP 中的正则表达式帮助(8 个十六进制字符后跟一个下划线)

python - 使用正则表达式根据条件匹配字符串