繁体   English   中英

Java中的正则表达式,可以拆分特殊字符和字母数字

[英]Regex in Java that can split special characters and alphanumerics

我正在研究在Java中使用正则表达式,并在此链接上发现了一些有趣的东西。 它说

[:punct:]   Punctuation symbols . , " ' ? ! ; : # $ % & ( ) * + - / < > = @ [ ] \ ^ _ { } | ~

用于分解特殊字符。 Java中是否有类似的东西,可以说我有一个变量:

String sample = "I have $100";

反正我可以打破变量:我有$ 100作为

I
have
$
100

由于您只想在£$上拆分,因此建议您将它们放在自己的字符类[£$]而不要使用预定义的字符类,其中包含许多可能不应该拆分的字符。 因此,尝试使用诸如split("\\\\s|(?<=[£$])")

  • \\\\s每个空格
  • (?<=[£$]) -每个在其之前有£$地方,例如$|100|表示该地方)。 此处使用的机制称为后向

演示版

for (String s : "I have $100 and £200".split("\\s|(?<=[£$])"))
    System.out.println(">" + s);

输出:

>I
>have
>$
>100
>and
>£
>200

您可以使用以下Java代码获取您要求的输出,

 Pattern pattern = Pattern.compile("(\\$)|(\\w+)");/*(\\w*)"); changed to \\w+ to avoid empty matches, based on AlanMoore's remark*/
            Matcher matcher = pattern.matcher("I have $100");
            while(matcher.find()){
//                if(matcher.group().isEmpty())continue;

                System.out.println(matcher.group());
            }

尝试, 环视正则表达式,

  String sample = "£9999";
  String[] arr = sample.split("(?<=[$£])|(?= )");
  for (String string : arr) {
     System.out.println(string);
  }

输出:

£
9999

\\b是此任务的一个非常简单的正则表达式,它与单词边界匹配。 拆分后,您需要修剪结果并过滤出空字符串,然后您就可以得到想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM