String split特殊正则表达式

时间:2017-12-26 15:24:02

标签: java regex string split

我试图标记字符串输入,但我无法理解如何做到这一点。 想法是将字符串拆分为字母词和非字母符号的实例。 例如,字符串"Test, ( abc)"将拆分为["Test" , "," , "(" , "abc" , ")" ].

现在我使用这个正则表达式: "(?<=[a-zA-Z])(?=[^a-zA-Z])" 但它没有做我想要的。

任何想法我还能用什么?

4 个答案:

答案 0 :(得分:2)

我看到你想要对字母表进行分组(比如Test和abc),但不要对非字母字符进行分组。另外我看到你不想显示空格char。为此,我将在删除字符串中的所有空格后使用 "(\\w+|\\W)"

示例代码

String str = "Test, ( abc)";
str = str.replaceAll(" ",""); // in case you do not want space as separate char.
Pattern pattern = Pattern.compile("(\\w+|\\W)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}

<强>输出

Test , ( abc ) 我希望这回答了你的问题。

答案 1 :(得分:0)

试试这个:

String s = "I want to walk my dog, and why not?";
Pattern pattern = Pattern.compile("(\\w+|\\W)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group());
}

输出:

I
want
to
walk
my
dog
,
and
why
not
?

\ w可用于匹配单词字符([A-Za-z0-9_]),以便从结果中删除标点符号

(摘自:here

答案 2 :(得分:0)

试试这个:

public static ArrayList<String> res(String a) {
        String[] tokens = a.split("\\s+");
        ArrayList<String> strs = new ArrayList<>();
        for (String token : tokens) {
            String[] alpha = token.split("\\W+");
            String[] nonAlpha = token.split("\\w+");
            for (String str : alpha) {
                if (!str.isEmpty()) strs.add(str);
            }
            for (String str : nonAlpha) {
                if (!str.isEmpty()) strs.add(str);
            }
        }
        return strs;
    }

答案 3 :(得分:0)

我想用最简单的形式,用

分开
    (?<= [a-zA-Z] )               # Letter behind
    (?= [^\sa-zA-Z] )             # not letter/wsp ahead
 |                              # or,
    (?<= [^\sa-zA-Z] )            # Not letter/wsp behind
    (?= [a-zA-Z] )                # letter ahead
 |                              # or,
    \s+                           # whitespaces (disgarded)

解释

callback