创建用于拆分的正则表达式

Creating regular expression for splitting

我目前正在学习信息学并且知道正则表达式是什么(java 中没有)。 我有这样的输入:

"String1  ( Nr = 323) String2 String3 (Nr  = 3)"

我想使用以下方式拆分它:

split("[ ()=]");

因为我认为这会拆分所有 " ","(",")","="。我对吗?或者我需要在它后面加一个 + 吗?如果这已经是正确的,我可以添加一个 * 这样我也可以拆分为 "(("?

如果这不是问题,那么我在 java 中关于正则表达式的另一个问题是如何检查我的字符串是否仅包含数字。

我试过了:

contains(".*\d+.*")
matches(".*\d+.*")

但我很确定其中一个正在运行。所以我的问题应该是拆分正则表达式。

我原来的问题是我在索引 2 处的拆分字符串数组得到了 NumberFormatException,通常应该是“323”?

我可以将正则表达式与 * 一起使用吗?喜欢 "[ ()=]*" ?

提前致谢

是的,它会拆分这些字符,但不会产生预期的结果。您需要对您的角色使用量词 class。我建议使用 + 表示 "one or more" 次。

String s = "String1  ( Nr = 323) String2 String3 (Nr  = 3)";
String[] parts = s.split("[ ()=]+");
System.out.println(Arrays.toString(parts));

输出

[String1, Nr, 323, String2, String3, Nr, 3]

一个可用于拆分字符串的正则表达式

  • 必须描述您想要的字符串之间的所有分隔符
  • 可能无法描述空字符串

你有非space分隔符()=,在你想要的字符串之间被space包围。你可以慷慨地使用

"[ ()=]+"   any mixture

或繁琐(需要 ()= 之一)并执行

"\s*[()=]\s*"

使用这个正则表达式,拆分 "foo (( bar" 会得到三个字符串。

确保它只是三重奏中的*一个+ ()=

要检查字符串是否仅包含数字,您必须定义 "numbers"。 "digit" 和 "number" 之间存在普遍混淆,"number" 可能是有符号或无符号,整数或分数,... Numbers 暗示至少一个 space.

"\s*(\d+)(\s+\d+)*\s*"

描述由(可选)space分隔和包围的无符号整数。在这个简单的例子中,还有

"[\s\d]+"

会的。