我有以下字符串:
list1
我希望它匹配到:
匹配#1
type:crash status:new "status:in progress 2" type:bug email:example@example.com
匹配#2
type:crash
匹配#3
status:new
匹配#4
status:in progress 2
匹配#5
type:bug
以下是我的尝试:
email:example@example.com
不幸的是我无法匹配双引号和电子邮件部分,请您告诉我如何增强此正则表达式以匹配上述数据。
答案 0 :(得分:2)
不要使用正则表达式。使用标准库中Shellwords的shellsplit
。它专为这个问题而设计,涵盖了你需要花时间覆盖正则表达式的边缘情况。
require 'shellwords'
str = 'type:crash status:new "status:in progress 2" type:bug email:example@example.com'
p str.shellsplit
# => [ "type:crash",
# "status:new",
# "status:in progress 2",
# "type:bug",
# "email:example@example.com" ]
答案 1 :(得分:1)
不确定特定边缘情况,但此正则表达式应与示例中的所有内容匹配。我在Rubular上测试了它。
("[^"]+"|[^\s]+:[^\s]+)
基本上“引号中的任何内容”或“任何不是空白的字符串一次或多次后跟冒号然后后跟不是空格字符”