当前位置: 首页 > 知识库问答 >
问题:

正则表达式,用于在每个字符处拆分,但将数字保持在一起

苏墨竹
2023-03-14

我正在寻找一个正则表达式,它可以按如下方式拆分字符串:

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", ")"

字符串在每个字符处被拆分。但是,如果数字相邻,则它们应保持在一个字符串中。

共有2个答案

冯元徽
2023-03-14

您还可以使用模式和匹配器拆分成令牌,这是相当可读性

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(); }
      };
    }
  };
}
柴英锐
2023-03-14

您可以使用这个基于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'之前。如何摆脱字符串数组列表中的这个空值。任何帮助都很高兴!!