我试图标记字符串输入,但我无法理解如何做到这一点。
想法是将字符串拆分为字母词和非字母符号的实例。
例如,字符串"Test, ( abc)"
将拆分为["Test" , "," , "(" , "abc" , ")" ].
现在我使用这个正则表达式:
"(?<=[a-zA-Z])(?=[^a-zA-Z])"
但它没有做我想要的。
任何想法我还能用什么?
答案 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