Java 使用正则表达式从字符串中获取特定单词

Java 使用正则表达式从字符串中获取特定单词,java,regex,string,Java,Regex,String,我有一根绳子 String string = "-minY:50 -maxY:100 -minVein:8 -maxVein:10 -meta:0 perChunk:5;"; 我想用regex(替换除-meta:0之外的所有内容)从中得到-meta:0,我制作了一个regex,它删除-meta:0,但我不能让它删除除-meta:0之外的所有内容 我尝试使用其他一些正则表达式,但当我在其中有-meta:[0-9]时,它忽略了整行,就像你们可以看到的一样,我所有的东西都有一行。 这是如何从字符串中

我有一根绳子

String string = "-minY:50 -maxY:100 -minVein:8 -maxVein:10 -meta:0 perChunk:5;";
我想用regex(替换除-meta:0之外的所有内容)从中得到-meta:0,我制作了一个regex,它删除-meta:0,但我不能让它删除除-meta:0之外的所有内容 我尝试使用其他一些正则表达式,但当我在其中有-meta:[0-9]时,它忽略了整行,就像你们可以看到的一样,我所有的东西都有一行。 这是如何从字符串中删除-meta:0的:

String meta = string.replaceAll("( -meta:[0-9])", "");
System.out.println(meta);
我只是想扭转这种局面,删除除-meta:[0-9]之外的所有内容


我在页面上找不到关于我的问题的任何内容,因为在找到单词后,所有内容都忽略了整行内容,因此,如果有类似的内容,我很抱歉。

您应该在捕获的组中捕获您的匹配项,并使用它的引用替换为:

String meta = string.replaceAll("^.*(-meta:\\d+).*$", "$1");
System.out.println(meta);
//=> "-meta:0"

据我所知,您需要:

a) 您想从字符串中提取
meta*

b) 用

你可以这样做:

String string = "-minY:50 -maxY:100 -minVein:8 -maxVein:10 -meta:0 perChunk:5;";


Pattern p = Pattern.compile(".*(-meta:[0-9]).*");
Matcher m = p.matcher(string);

if ( m.find() )
{
    string = string.replaceAll(m.group(0),m.group(1));

    System.out.println("After removal of meta* : " + string);
}

这段代码的作用是找到
meta:[0-9]
并保留它,然后删除其他找到的组

谢谢,看起来它起作用了。我刚刚在字符串文字错误中得到非法转义字符,因为我需要“\\d”而不是“\d”来将这个问题转义到输出:“删除meta*:-meta:0 |-meta:0 |-meta:0 |-meta:0”而不是“删除meta*:-meta:0”,anubhava的回答帮助了我,但这仍然可以工作,我看不出它如何打印“-meta:0 |-meta:0 |-meta:0 |-meta:0 |-meta:0 |-meta:0 |-meta:0 |-meta:0”?你的输入字符串是什么?嗯…看起来我可能输入了错误的字符串。这一切都可以用,对不起,我的错了!我会使用anubhava和你的混合,因为我会发现它在某些情况下很有用。