【问题标题】:RegEx to split string based on operators and retain operator in answer正则表达式根据运算符拆分字符串并在答案中保留运算符
【发布时间】:2013-06-14 09:27:18
【问题描述】:

我想根据几个操作数拆分字符串。

例如 字符串:a&&(b||c)

ANS : String[] {a,&&,(,||,c,)}

java RegEx 可以吗?如果是那怎么办?

我尝试使用 [&&||()] regEx ,但它没有提供所需的输出。甚至我都不知道如何留住运营商。

编辑: 如果我们有 & 和 |而不是 && 和 || ?

【问题讨论】:

  • 请更具体。
  • @ Zagorulkin Dmitry :我想拆分输入字符串,答案应该如上所示。
  • 答案是:是的,有可能。也许你真的在问“我该怎么做?”在这种情况下:告诉我们你做了什么以及结果是什么,告诉我们你期望的结果是什么,我们会告诉你要改变什么。
  • 它宁愿解析它。
  • 但在您的示例中,您没有区分运算符和其他令牌。您只需要一个匹配任何标记的正则表达式,无论是运算符还是其他。

标签: java regex string split pattern-matching


【解决方案1】:

您可以按以下方式拆分:

(?<![&|])(?=[&|])|(?<=[&|])(?![&|])
  • (?&lt;![&amp;|])(?=[&amp;|]) 表示“任何字符间,不是前面有&amp;或|,但是后面有@987654325 @或|";
  • 相反,(?&lt;=[&amp;|])(?![&amp;|]) 表示“任何 字符间, 前面有 &amp; 或 |,但 不是 后跟 &amp; 或 |"。

例如:

String pattern = "(?<![&|])(?=[&|])|(?<=[&|])(?![&|])";
String input = "a&&(b||c)";
String[] array = input.split(pattern);
System.out.println(Arrays.asList(array));

打印:

[a, &&, (b, ||, c)]

【讨论】:

  • 如果我们有 & 和 |而不是 && 和 || ?以上会起作用吗?
  • @PriyankDoshi 试试看:)(剧透:是的)
【解决方案2】:

您需要提供“操作数”列表,例如:

[0-9]|[a-z]|[A-Z]|\|\||&amp;&amp;|\(|\)

每个未转义的| 都定义了新的操作数。您需要通过添加\ 来转义一些关键字操作数。

那么你需要使用find 的java.util.regex.Matcher。获取每个操作数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2012-08-13
    • 2014-11-22
    • 2011-02-24
    • 2015-05-01
    相关资源
    最近更新 更多