Java:如何从字符串中提取两个字符之间的子字符串?

Cry*_*sie 5 java regex

我是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)

如果有更好的方法,请告诉我,或者是否有人可以帮我弄清楚我的正则表达式有什么问题.

sp0*_*00m 8

这应该工作:

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 .


Jay*_*com 6

如果您仍想使用模式匹配,请查看积极的外观.它允许您匹配以斜杠开头的单词,但实际上不匹配斜杠本身.

一个例子是这样的:

(?<=/).+?(?= |$)
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)