使用Java正则表达式在多行上成对拆分文本
我有以下案文:使用Java正则表达式在多行上成对拆分文本,java,regex,split,Java,Regex,Split,我有以下案文: my-widget{ color: #{mycolors.getColors(1)} } ... my-tridget{ color: #{mycolors.getColors(2)} ... } ... 我想将文本分成两部分,其中分隔符为#{mycolors.getColors()},将保存上一个delimeter和当前分隔符之间的文本。例如,对于此类配对: 第1对: 文本:我的小部件{ 颜色: 编号:1 第2对: 文本:} ... 我的三叉戟{ 颜色: 编号:
my-widget{
color: #{mycolors.getColors(1)}
}
...
my-tridget{
color: #{mycolors.getColors(2)}
...
}
...
我想将文本分成两部分,其中分隔符为#{mycolors.getColors()},将保存上一个delimeter和当前分隔符之间的文本。例如,对于此类配对:
第1对:
文本:我的小部件{
颜色:
编号:1
第2对:
文本:}
...
我的三叉戟{
颜色:
编号:
二,
到目前为止我所用的
Pattern p = Pattern.compile("(.*)#\\{mycolors.getColor\\(([0-9])\\)\\}", Pattern.CASE_INSENSITIVE|Pattern.MULTILINE);
Matcher m = p.matcher(data);
while (m.find){
String number = m.group(2).toLowerCase().trim();
String text = m.group(1);
}
但编号和文字应为:
文本:颜色:编号:1
文本:颜色:编号:2
因此,文本不会超过几行。我如何才能做到这一点?(Pattern.DOTALL添加到Pattern.MULTILINE中对我没有帮助)您正在犯的一些错误:
Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}",
Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Pattern.DOTALL
而不是Pattern.MULTILINE
*
让它成为非贪婪的*?
getColors
,但正则表达式中有getColor
Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}",
Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
您正在犯的一些错误:
Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}",
Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Pattern.DOTALL
而不是Pattern.MULTILINE
*
让它成为非贪婪的*?
getColors
,但正则表达式中有getColor
Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}",
Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
@Simon抱歉,但我不知道如何使用您的建议。@Simon抱歉,但我不知道如何使用您的建议。谢谢您的回答!我尝试更改正则表达式,它似乎符合我的要求。谢谢您的回答!我尝试更改正则表达式,它似乎符合我的要求。