我正在使用带有Groovy(Grails)的正则表达式来查找子字符串,该字符串是大写字母,下划线和数字的组合。
正则表达式
"THIS_WORD" ==~ /([A-Z_0-9]*)/
返回true
(
但是以下声明
def str = "Wlkjjf alkjdfas Wk;ljdfs fk THIS_WORD dsklafjf kjd".findAll{([A-Z_0-9]*)/}
println str
返回[W, W, T, H, I, S, _, W, O, R, D]
我只需要单词THIS_WORD
而不是重复两次的字母W.
我在这里缺少什么?
答案 0 :(得分:2)
也许您可以使用{2,}而不是*来获得超过1个字符的所有匹配:
def str = "Wlkjjf als Wk;lfs fk THIS_WORD dsjf kjd".findAll(/[A-Z_0-9]{2,}/)
答案 1 :(得分:1)
([A-Z0-9 _] {2,})
在http://groovyconsole.appspot.com/了解了groovy并在groovy控制台上进行测试后,我发现这很有效。
def str =“Wlkjjf alkjdfas Wk; ljdfs fk THIS_WORD dsklafjf kjd”.findAll(/([A-Z_0-9] {2,})/)
println str
答案 2 :(得分:1)
def str =“Wlkjjf alkjdfas Wk; ljdfs fk THIS_WORD dsklafjf kjd”.findAll {([A-Z_0-9] *)/}
这不编译。也许你的意思是:
"Wlkjjf alkjdfas Wk;ljdfs fk THIS_WORD dsklafjf kjd".findAll(/[A-Z_0-9]*/)
给出了
[W, , , , , , , , , , , , , , , , W, , , , , , , , , , , , THIS_WORD, , , , , , , , , , , , , , ]
如果你正在寻找所有大写单词,这样的正则表达式会更好:
"Wlkjjf alkjdfas Wk;ljdfs fk THIS_WORD dsklafjf kjd".findAll(/\b[A-Z_0-9]+\b/)