我有以下字符串:
def str='prop1: value1, prop2: value2;value3, prop3:"test:1234, test1:23;45, test2:34;34", prop4: "test1:66;77, 888"'
字符串
我想以下面的配对列表作为结束
prop1: value1
prop2: value2;value3
prop3: test:1234, test1:23;45, test4:34;34
prop4: test, 66;77, 888
型
我想如果我可以先解析并去掉props3和props4,那么我可以简单地用逗号分割字符串的其余部分。
下面是我到目前为止尝试过的代码和正则表达式。代码中注解了我尝试过的各种正则表达式,但无法提取最后一个prop4。
def str='prop1: value1, prop2: value2;value3, prop3:"test:1234, test1:23;45, test4:34;34", prop4: "test, 66;77, 888"'
//def regex = /(\w+):"(.*)"[,\s$]/
//def regex = /(\w+):"(.*)"[,|\s|$]/
def regex = /(\w+):"(.*)"[,\s]|$/
def m = (str =~ regex)
(0..<m.count).each{
println("${m[it][1]}=${m[it][2]}")
}
型
这将返回:
prop3=test:1234, test1:23;45, test2:34;34
null=null
型
我错过了什么?
(Also,有没有办法只通过一个正则表达式来解析所有这些,而不是我上面描述的方法..正则表达式第一,然后分裂)
3条答案
按热度按时间cgh8pdjw1#
基于你的给予的例子数据,下面的正则表达式会起作用:
字符串
RegEx Demo
RegEx Demo:
\b
:字边界(\w+)
:捕获组#1无法匹配1个以上单词字符:
:匹配:
\s*
:0个或多个空格(
:启动捕获组#2\"[^\"]*\"
:匹配引用的文本|
:或[^,\"]*
:匹配0个或多个不是,
和"
的字符)
:结束捕获组#2f45qwnt82#
如果你可以为不同的比赛使用不同的捕获组,那么请尝试以下正则表达式。这里是Online Demo用于正则表达式。
字符串
型
wvt8vs2t3#
尝试以下 * 捕获模式 *。
字符串
(prop.+?):\s*
,捕获以 “prop” 开头的文本,最大为:
。(.+?)(?=, prop.+?:|$)
,捕获到另一个 *“prop”**键 * 或字符串结尾的所有文本,$
。在 Java 中,你可以使用 Pattern 和 Matcher 类。
的数据
输出
型