正则表达式模式使用标识符拆分字符串中的单词

时间:2017-08-17 13:31:55

标签: java regex

我想用逗号分割下面的字符串,使用DOTALL正则表达式模式接受字母,数字,空格和特殊字符,如下划线和星号,即@input("Test_1, Test_TWO , TEST_THIRTY_3*"),所以输出看起来像:

"Test_1",
"Test_TWO",
"TEST_THIRTY_3*"
public static void main(String args[])
{
    String line = "@input(\"Test_1,Test_TWO , TEST_THIRTY_3*\"\\)\";
    String pattern = "@input(\"(.*?)\".*";
    Pattern r = Pattern.compile(pattern, Pattern.DOTALL);
    Matcher m = r.matcher(line);
    while (m.find()) {
       System.out.println("Found word: " + m.group(1) );
    }

2 个答案:

答案 0 :(得分:1)

您必须在\(之前转义@input\(\"(.*?)\".*,这样您的正则表达式应如下\s*,\s*,其次您可以使用String line = "@input(\"Test_1,Test_TWO , TEST_THIRTY_3*\"\\)"; String pattern = "@input\\(\"(.*?)\".*"; Pattern r = Pattern.compile(pattern, Pattern.DOTALL); Matcher m = r.matcher(line); while (m.find()) { System.out.println(Arrays.toString(m.group(1).split("\\s*,\\s*"))); //----------------------------------------------------^^^^^^^^ } 将结果拆分为:

[Test_1, Test_TWO, TEST_THIRTY_3*]

输出

col_sample_rate_per_level

答案 1 :(得分:0)

如果你不必坚持使用正则表达式,你可以采用字符串方法。

Math.max(1, Runtime.getRuntime().availableProcessors() - 2)