0

我正在编写一段 Groovy,它需要捕获字符串中模式的多个实例。具体来说,字符串应如下所示:

"Blah blah blah blah key1:value1 key2:value2 blah blah blah key3:value3"

我需要捕获:key1:value1、key2:value2 & key3:value3。

我认为正则表达式应该是这样的

def regex = ~/[^|\s](.+:.*)[$|\s|\n]/

我需要做什么来捕获字符串中模式的所有实例?

4

3 回答 3

0

您也可以尝试:

def s =  "Blah blah blah blah key1:value1 key2:value2 blah blah blah key3:value3"

def m = s =~ /(([^\s]+​):([^\s]+))/

m.collect { x -> x.drop( 2 ) }.collectEntries()

​</p>

于 2013-10-20T22:42:57.817 回答
0
def regex = ~/(?is)[a-z0-9_]+:[^\s]*/

Key1:Value1此正则表达式将匹配、My_Key:My_valueKey2:(不带值)之类的实例。

(?is)使匹配不区分大小写并使换行符(分隔行)与\nand匹配\r\n[a-z0-9_]+匹配 " " 对左侧的任何字母、数字和下划线序列key1:value1。在括号中添加额外的字符以匹配更多种类的可能键名。[^\s]*匹配“:”之后最长的字符序列,在您到达空格(如空格、制表符或行尾)之前。Key1:如果右边没有值,它也会返回 " ",所以如果你不想在缺少值的情况下不匹配,请使用+而不是。*

于 2013-10-18T21:20:00.090 回答
0

如果您的“项目”由空格分隔(并且没有项目本身包含空格),您可以使用这个:

 def somestring = "Blah blah blah blah key1:value1 key2:value2 blah blah blah key3:value3"

 assert somestring.split().findAll{it.contains ':'} == ["key1:value1", "key2:value2", "key3:value3"]

当然,这只会为您提供“键:值”项作为字符串。(尽管从值中分离键是另一个简单的步骤。)也许您可以更详细地指定您的要求。

于 2013-10-18T20:45:15.450 回答