我是Java的新手,我需要一些帮助才能从字符串中提取多个子字符串.字符串的示例如下所示:
String = "How/WRB can/MD I/PRP find/VB a/DT list/NN of/IN celebrities/NNS '/POS real/JJ names/NNS ?/."
Run Code Online (Sandbox Code Playgroud)
期望的结果: WRB MD PRP VB DT NN IN NNS POS JJ NNS
我有一个文本文件,可能有数千个类似的POS标记行,我需要从中提取POS标记并根据POS标记进行一些计算.
我尝试过使用tokenizer但是没有真正得到我想要的结果.我甚至尝试使用split()并保存到数组,因为我需要存储它并在以后使用它,但仍然无效.
最后,我尝试使用模式匹配器,我正在使用正则表达式的问题,因为它返回正斜杠的单词.
Regex: [\/](.*?)\s\b
Result: /WRB /MD ....
Run Code Online (Sandbox Code Playgroud)
如果有更好的方法,请告诉我,或者是否有人可以帮我弄清楚我的正则表达式有什么问题.
这应该工作:
String string = "How/WRB can/MD I/PRP find/VB a/DT list/NN of/IN celebrities/NNS '/POS real/JJ names/NNS ?/.";
System.out.println(string.replaceAll("[^/]+/([^ ]+ ?)", "$1"));
Run Code Online (Sandbox Code Playgroud)
打印: WRB MD PRP VB DT NN IN NNS POS JJ NNS .
如果您仍想使用模式匹配,请查看积极的外观.它允许您匹配以斜杠开头的单词,但实际上不匹配斜杠本身.
一个例子是这样的:
(?<=/).+?(?= |$)
Run Code Online (Sandbox Code Playgroud)
匹配以斜杠开头的任何内容,后跟空格或字符串的结尾
这是一个用Java编写的工作示例:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.LinkedList;
public class SO {
public static void main(String[] args) {
String string = "How/WRB can/MD I/PRP find/VB a/DT list/NN of/IN celebrities/NNS '/POS real/JJ names/NNS ?/.";
Pattern pattern = Pattern.compile("(?<=/).+?(?= |$)");
Matcher matcher = pattern.matcher(string);
LinkedList<String> list = new LinkedList<String>();
// Loop through and find all matches and store them into the List
while(matcher.find()) {
list.add(matcher.group());
}
// Print out the contents of this List
for(String match : list) {
System.out.println(match);
}
}
}
Run Code Online (Sandbox Code Playgroud)