【问题标题】:Can't match two different regex on split拆分时无法匹配两个不同的正则表达式
【发布时间】:2014-05-15 19:51:40
【问题描述】:

所以我在调用 Split 方法时使用字符串作为分隔符。

String[] aExpr;
String strDelimiter = "[-+/=^//%//*//(//);:?]"; 
aExpr = expr.split(strDelimiter);

这将使用strDelimiter 相应地分解的字符串填充aExpr

问题是我还希望Split() 方法不仅可以比较strDelimiter,还可以比较这个字符串:

String oprDelimiter = "[abcdefghijklmnopqrstuvwxyz0123456789]+"

这基本上是任何字符后跟数字。我可以将所有这些字符添加到第一个字符串中,但最后的 + 不会让我这样做。 + 表示单词的任何组合都会破坏字符串。关于我该怎么做的任何想法?

【问题讨论】:

  • 提供样本输入输出。
  • 请显示示例字符串以及应用拆分功能后您期望的结果
  • 我现在正在做的是使用一个分隔符并将其拆分为一个数组,然后是另一个。在我拆分两者之后,我将它们放在另一个数组中。假设我输入“1+3+5” 我的 aExpr 数组将有 1、3、5 并且我的 aOpr 数组将有 +、+ 我想要的是将它们放在一个数组中,这样我就不必放以后他们在一起。清楚吗?
  • 现在很清楚,您必须使用环视作为分隔符:String strDelimiter = "(?=[-+/=^%*();:?])|(?<=[-+/=^%*();:?])";环视(前瞻和后视)仅检查字符串中某个位置之前或之后的内容,但不使用字符。它们是“零宽度断言”。
  • // 似乎不对。如果您的意思是转义序列,那么您应该使用\\,但您不必在[...](字符类)中转义%*()

标签: java regex string split


【解决方案1】:

尝试使用这个正则表达式:

(?<=[abcdefghijklmnopqrstuvwxyz0123456789])(?=[-+=^%*();:?])|(?<=[-+=^%*();:?])(?=[abcdefghijklmnopqrstuvwxyz0123456789])

作为分隔符。它将在前面有任何字符 abcdefghijklmnopqrstuvwxyz0123456789 并且后面有任何字符 -+=^%*();:? 的任何位置拆分,反之亦然。在这里解释和演示:http://regex101.com/r/mT3lL1.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多