我正在寻找一个正则表达式,它可以按如下方式拆分字符串:
String input = "x^(24-3x)";
String[] signs = input.split("regex here");
for (int i = 0; i < signs.length; i++) { System.out.println(sings[i]); }
其结果是:
"x", "^", "(", "24", "-", "3", "x", ")"
字符串在每个字符处被拆分。但是,如果数字相邻,则它们应保持在一个字符串中。
您还可以使用模式和匹配器拆分成令牌,这是相当可读性
String regex="\\d+|[a-z]+|[\\-()\\^]";
String str="x^(24-3x)";
如果使用str=“xxx^(24-3xyz)”也很容易;
要获得所有代币,有点棘手:
我用这个:
提供:创建正则表达式匹配数组
for (MatchResult match : allMatches(Pattern.compile(regex), str)) {
System.out.println(match.group() + " at " + match.start());
}
public static Iterable<MatchResult> allMatches(
final Pattern p, final CharSequence input) {
return new Iterable<MatchResult>() {
public Iterator<MatchResult> iterator() {
return new Iterator<MatchResult>() {
// Use a matcher internally.
final Matcher matcher = p.matcher(input);
// Keep a match around that supports any interleaving of hasNext/next calls.
MatchResult pending;
public boolean hasNext() {
// Lazily fill pending, and avoid calling find() multiple times if the
// clients call hasNext() repeatedly before sampling via next().
if (pending == null && matcher.find()) {
pending = matcher.toMatchResult();
}
return pending != null;
}
public MatchResult next() {
// Fill pending if necessary (as when clients call next() without
// checking hasNext()), throw if not possible.
if (!hasNext()) { throw new NoSuchElementException(); }
// Consume pending so next call to hasNext() does a find().
MatchResult next = pending;
pending = null;
return next;
}
/** Required to satisfy the interface, but unsupported. */
public void remove() { throw new UnsupportedOperationException(); }
};
}
};
}
您可以使用这个基于lookaround的正则表达式:
String[] signs = input.split("(?<!^)(?=\\D)|(?<=\\D)");
正则表达式演示
RegEx分手
(?<!^)(?=\\D) # assert if next char is non-digit and we're not at start
| # regex alternation
(?<=\\D) # assert if previous character is a non-digit
我有一个表格形式的命令输出。我正在解析结果文件的输出并将其存储在字符串中。一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式匹配1个或多个空格并拆分它。但是,在每个元素之间插入一个空格: 还有更好的方法吗? 每次拆分后,str2都会附加到列表中。
字符串示例: 比方说,我想用<代码>来分割这个句子 字符(如果不在<代码> 我一直在使用: 如果不在<代码>
问题内容: 我是regex的新手,我想做的是在特定条件下拆分String,但我不知道该怎么做。 这是样品/条件 我希望字符串被拆分,,,,,, 这可能吗? 问题答案: 如果 确实 需要使用正则表达式,则可能应该使用环顾四周机制,因为您不想 在 此字符 之前 或 之后 进行拆分。 输出:
问题内容: 我有一个字符串,需要根据出现的“,”(逗号)进行拆分,但是需要忽略在一对括号内出现的任何字符串。例如, 应拆分为 问题答案: 对于非嵌套 嵌套 (括号内的括号)
我有一个字符串: 我想用分隔符< code >分割这个字符串 为此,我使用以下方法: 我得到了我需要的东西,除了我失去了分隔符。下面是示例:http://jsfiddle.net/JwrZ6/1/ 如何保留分隔符?
以下是我的输入 null 我想在每个字符串到达“。”时将其分隔。并存储在字符串数组列表中。 我尝试使用下面的代码, null 预期产出: 阿尔波 拉波尔 串 实际输出: ""-&>;空白空间 拉波尔 串 它将列表的第一个值打印为空值,因为有许多“。”出现在'a'之前。如何摆脱字符串数组列表中的这个空值。任何帮助都很高兴!!