java - 如何从没有空格的字符串中提取某些特殊字符之间的所有单词?

标签 java regex string

我有一个字符串,它是从解析推文内容的网站获取的结果,这里是字符串:

"1\tI\t_\tPRP\tPRP\t_\t2\tnsubj\t_\t_\n2\t需要\t_\tVB\tVBP\t_\t0\tnull\t_\t_\n3\tmore\t_\tJJ\tJJR\t_\t4\tamod\t_\t_\n4\twords\t_\tNN\tNNS\t_\t2\tdobj\t_\t_\n5\tlike\t_\tIN\tIN\t_\t4\tprep\t_\t_\n6\tmarvel\t_\tNN\tNN\t_\t5\tpobj\t_\t_\n7\tor\t_\tCC\tCC\t_\t6\tcc\t_\t_\n8\tcat\t_\tNN\tNN\t_\t6\tconj\t_\t_\n9\tor\t_\tCC\tCC\t_\t6\tcc\t_\t_\n10\t煎饼\t_\tNN\tNN\t_\t6\tconj\t_\t_\n11\tor\t_\tCC\tCC\t_\t10\tcc\t_\t_\n12\t法国\t_\tNN\tNN\t_\t10\tconj\t_\t_", "文本": "我需要更多的词,比如奇迹、猫、煎饼或法国"

我想要得到“\t”和“\t_\tNN”之间的所有单词,换句话说我想要名词,我想要输出是“words”,“marvel”,“cat” 、“煎饼”、“法国”。

我尝试了下面的代码:

private void regex(String s){
        if(s.indexOf("error") >= 1){
            Toast.makeText(this, "Sorry the site failed again it's not my fault :(",
                       Toast.LENGTH_SHORT).show();
        }
        else{
            Pattern pattern = Pattern.compile("\t(.*?)\t_\tNN");
            Matcher matcher = pattern.matcher(s);
            System.out.println(s);
            if (matcher.find()) {
                String result = matcher.group(1);
                System.out.println(result);
            }
        }

    }

我确信我的pattern.compile字符串是错误的..它不起作用,似乎找不到我想要的单词..

谁能告诉我该如何解决?

附注关于类似于“/t”的制表符,我实际上打印了整个网站作为结果,但是当我得到字符串结果时,我猜它们只是一个反斜杠和一个“t”,而不是仍然是制表符。

最佳答案

您可以使用以下内容:

"\\\\t([^\\\\]*?)\\\\t_\\\\tNN"

参见Ideone Demo

参见RegEx Demo

关于java - 如何从没有空格的字符串中提取某些特殊字符之间的所有单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30718713/

相关文章:

javascript - 正则表达式不能在 IE 7 的 Javascript 中工作

c - 限制 C 字符串中十六进制转义序列的长度

python - 如何在不使用 format() 的情况下以简单的表格格式显示值

java - 如何在java中获取hashmap内数组的大小

java - 可以使用 Retrofit 进行 SOAP web 服务调用吗?

python - 否定正则表达式的一部分

php - 列出字符类的成员

string - 如何在 Scala 中以功能方式根据符号白名单检查字符串?

java - 访问变量类型 List<File>(lib-gwt-file 和 GWT)时出现 UmbrellaException

java - 我们怎么知道应用了某种方法?