我正在尝试分解以下字符串:
"@command Text1 @command2 Text2"
在Ruby中我想在数组中取出“Text1”和“Text2”。为此,我使用扫描方法并使用:
text.scan(/@* (.*?)(@|$)/)
然而,在运行时,脚本将中间的@符号作为单独的匹配(可能是因为在Ruby中使用括号来指示要从输入中提取的字符串):
Text1
@
Text2
我的问题是,我怎样才能提出Text1和Text2,因为表达式需要在“@”和字符串末尾停止匹配?
答案 0 :(得分:5)
如果您想要使用非捕获组?:
text.scan(/@* (.*?)(?:@|$)/)
作为旁注,您的正则表达式看起来可能包含错误。也许你的意思是这样呢?
text.scan(/@\w+ (\w+)(?= @|$)/)
区别在于你的表达式在" foo"
上匹配,我猜这不是故意的。
答案 1 :(得分:1)
text.scan(/@* (.*?)(?:@|$)/)'
答案 2 :(得分:1)
在你的正则表达式中,你不需要围绕'@ | $'的括号。如果没有在单独的匹配组中返回“@”,以下内容将完成相同的操作:
text.scan(/@* (.*?)[@\$]/)
由于您只查找该组中的单个字符,因此方括号将匹配其中的任何一个字符。
答案 3 :(得分:0)
我是这样做的:
text.scan(/@[^\s]* ([^@]*)/)
答案 4 :(得分:0)
这个正则表达式怎么样? http://rubular.com/regexes/13264