我正在编写一段 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]/
我需要做什么来捕获字符串中模式的所有实例?
您也可以尝试:
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>
def regex = ~/(?is)[a-z0-9_]+:[^\s]*/
Key1:Value1此正则表达式将匹配、My_Key:My_value或Key2:(不带值)之类的实例。
(?is)使匹配不区分大小写并使换行符(分隔行)与\nand匹配\r\n。[a-z0-9_]+匹配 " " 对左侧的任何字母、数字和下划线序列key1:value1。在括号中添加额外的字符以匹配更多种类的可能键名。[^\s]*匹配“:”之后最长的字符序列,在您到达空格(如空格、制表符或行尾)之前。Key1:如果右边没有值,它也会返回 " ",所以如果你不想在缺少值的情况下不匹配,请使用+而不是。*
如果您的“项目”由空格分隔(并且没有项目本身包含空格),您可以使用这个:
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"]
当然,这只会为您提供“键:值”项作为字符串。(尽管从值中分离键是另一个简单的步骤。)也许您可以更详细地指定您的要求。