【发布时间】:2020-01-26 04:52:16
【问题描述】:
我有一个字符串,我想在每个分号 ; 处分成几部分。
我为此使用 JAVA String.split(regex),创建了一个字符串数组。
示例:
string 1;
string 2;
string 3;
string 4 (
substring 1;
substring 2;
substring 3;
);
string 4;
我现在正在使用line.split("\\s*;\\s*");...
但是,正如预期但不想要的那样,让我回了["string 1", "string 2", "string 3", "string 4 (\nsubstring 1", "substring 2", "substring 3", ")", "string 4", ""]。
那么我如何匹配每个;,以便我可以拆分它,除了括号内的那些(子字符串后面的那些)?
编辑:
我确实设法创建了一个正则表达式来匹配“;”在括号内,但不在括号外......但在使用逻辑并将~(a^b)转换为~av~b(德摩根定律)之后,我确实做了一个正则表达式来匹配“;”括号外。
但它仍然不起作用,并且仍然在每个分号中中断...是 Java 本身的问题吗?
当前模式:((?<![\S\s]*?\([\S\s]*?)|(?![\S\s]*?\)[\S\s]*?));
【问题讨论】:
-
["string 1", "string 2", "string 3", "string 4 (substring 1; substring 2; substring 3)", "string 4", ""] -
这里是旧逻辑,但是为什么不将
(和)之间的;值替换为另一个值(可以使用indexOf/substring),然后替换所有;然后重新替换步骤 1 中更改的值? -
我现在实际上正在尝试,但它不起作用。我正在检查,但我想知道如果我没有发现问题,我是否可以完全在正则表达式中做到这一点。
game = game.replaceAll("(?<=.*\\(.*);(?=.*\\).*)", "$semicolon$"); myStory.importStory(game, "\\s*;\\s*");有没有更好的方法来确定替换值?
标签: java regex string regex-lookarounds string-matching