正则表达式分开数字

时间:2018-02-08 20:51:39

标签: java regex

我有以下字符串

  

$ 7 $ 7 + 41 + 11 + 11 + 4 2 + 21 + 41 + 71 + 13!

数字对应字典字符串索引,美元符号表示字母为大写,加号表示两位数。剩下的角色将留下来。

我把这种模式放在一起:

[$][\d]|[\d][x(?=+)][x(?!\d)]|[\d]|[\D]

但是,它找不到$7+4,并会将其拆分为$7+4

欢迎任何提示或建议。

修改

鉴于以下内容:

  • 主题$741+11+11+4 2+21+41+71+13!
  • 字典abcdefghijklmnopqrstuvwxyz

我期望的结果是Hello world!。每组字符对应于字典中的索引。因此$7表示字典7位置中字符的大写字母(H)。 4指向字典中的4元素(e),1+1指向字典中的11元素(l })。

2 个答案:

答案 0 :(得分:0)

我想你想做这个

"$7$7+41+11+11+4 2+21+41+71+13"

拆分为

$7,   $7,   +41,    +11,    +11,    +4,     2,    +21,    etc...

所以我认为正则表达式可能是

([\$\+\s][0-9]?+)

以Java形式表示:

"([\\$\\+\\s][0-9]?+)"

您可以在此网站中对此进行测试

https://www.regexplanet.com/advanced/java/index.html

答案 1 :(得分:0)

让我们看一下您实施的问题:

index_dict = {v: np.flatnonzero(arr == v) for v in np.unique(arr)}

  • [$][\d]|[\d][x(?=+)][x(?!\d)]|[\d]|[\D]括号表示&#34;找到匹配[<stuff>]&#34;的字符 - 对你的案子来说,它几乎没必要
  • <stuff>不会发现任何内容:$表示&#34;行尾&#34;,它想匹配&#34;行尾和数字&#34;
  • [$][\d]我很难预测这会匹配什么 - 从一个数字开始,然后有一个&#34;字符x后跟&#39;没有至少一次&#39 ;&#34; (+表示至少一次),然后&#34;字符x后面没有数字&#34;
  • [\d][x(?=+)][x(?!\d)] - 数字
  • [\d] - 非数字字符

你&#34; |&#34; (或)这些在一起。

结论:

  • 你需要逃脱特殊的角色! [\D]\$
  • x()不做你想要的任何事情
  • 大多数时候,它有助于以较长的顺序而不是字符级别来思考和制定问题

要重新解释您的问题陈述,您需要查找这些群组:

  • $位
  • + digitdigit
  • 不是\+而非$
  • 的字符

下面的课程就是这样:

+

输出:

public class Regex {

  public static void main(String[] args) {
    String test = "$7$7+41+11+11+4 2+21+41+71+13!";
    Pattern pattern =  Pattern.compile( "(\\$\\d)|(\\+\\d\\d)|([^\\$\\+])");
    Matcher matcher = pattern.matcher(test);
    while (matcher.find()) {
      System.out.println(matcher.group());
    }

  }

}