我正在研究在Java中使用正则表达式,并在this link上发现了一些有趣的东西。它说
[:punct:] Punctuation symbols . , " ' ? ! ; : # $ % & ( ) * + - / < > = @ [ ] \ ^ _ { } | ~
用于分解特殊字符。在Java中有类似的东西,假设我有一个变量:
String sample = "I have $100";
无论如何我可以打破变量:我有100美元
I
have
$
100
答案 0 :(得分:2)
由于您只想在£
或$
上进行拆分,我建议将它们放在您自己的角色类[£$]
中,而不是使用包含许多可能不应包含的字符的预定义字符分开。所以尝试split("\\s|(?<=[£$])")
之类的东西会分开
\\s
- 每个空白(?<=[£$])
- £
之前$
或$|100
之前的所有地方|
(for (String s : "I have $100 and £200".split("\\s|(?<=[£$])"))
System.out.println(">" + s);
代表此类地点)。这里使用的机制称为look-behind。 演示
>I
>have
>$
>100
>and
>£
>200
输出:
{{1}}
答案 1 :(得分:1)
您可以使用以下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());
}
答案 2 :(得分:0)
尝试,环顾正则表达式,
String sample = "£9999";
String[] arr = sample.split("(?<=[$£])|(?= )");
for (String string : arr) {
System.out.println(string);
}
<强>输出:强>
£
9999
答案 3 :(得分:0)
此任务的一个非常简单的正则表达式是\b
,它与单词边界匹配。拆分后你需要修剪结果并过滤掉空字符串,然后你得到你想要的东西。