我想要正则表达式的帮助来解决以下问题:
我有一个字符串,例如“1£23 $ 456 $£$”
当我拆分它时,我希望我的字符串数组中的输出包含:
1£
23$
456$
£
$
任何人都知道如何最好地解决这个问题?解决方案需要满足这些额外要求:
+
,-
,*
和/
答案 0 :(得分:3)
使用功能更强大的Matcher
功能代替String.split
。以下代码应该有效,但尚未优化:
Pattern pattern = Pattern.compile("\\d*(\\$|£)");
String input = "1£23$456$£$";
Matcher matcher = pattern.matcher(input);
List<String> output = new ArrayList<>();
while (matcher.find()) {
output.add(matcher.group());
}
打印出output.toString()
生成:
[1£, 23$, 456$, £, $]
更新了要求:
+
,-
,*
和/
使用正则表达式:\\d*\\s*[-\\+\\*/\\$£]
这种模式,用这个给定的输入:
1£23$456$£$7+89-1011*121314/1 £23 $456 $ £ $7 +89 -1011 * 121314 /
将生成此输出:
[1£, 23$, 456$, £, $, 7+, 89-, 1011*, 121314/, 1 £, 23 $, 456 $, £, $, 7 +, 89 -, 1011 *, 121314 /]
答案 1 :(得分:2)
使用后面看,这是非消费的:
String[] parts = str.split("(?<=\\D)");
这就是它的全部。正则表达式意味着“在每个非数字之后”进行拆分,这似乎正是您的意图。
一些测试代码:
String str = "1£23$456$£$";
String[] parts = str.split("(?<=\\D)");
System.out.println( Arrays.toString( parts));
输出:
[1£, 23$, 456$, £, $]
答案 2 :(得分:0)
你可能想要这个
Matcher m = Pattern.compile("[^$£]*(\\$|£)").matcher(input);