2

我有一些字符串喜欢

1.IND_FROM_ONE_TO_FIVE  
2.IND_FROM_FIVE_TO_TEN  
3.BS_FROM_ONE_TO_FIVE 
4.BS_FROM_FIVE_TO_TEN   
5.OP_FROM_ONE_TO_FIVE  
6.OP_FROM_FIVE_TO_TEN

我想在第一个“ ”包含“ ”之前从所有这些中删除所有内容!!!。

就像是 :

1.IND_FROM_ONE_TO_FIVE => FROM_ONE_TO_FIVE

2.IND_FROM_FIVE_TO_TEN => FROM_FIVE_TO_TEN

3.BS_FROM_ONE_TO_FIVE => FROM_ONE_TO_FIVE

4.BS_FROM_FIVE_TO_TEN => FROM_FIVE_TO_TEN etc.

我试过/[^_]*/了,但它返回了IND_FROM_ONE_TO_FIVE => _FROM_ONE_TO_FIVE(没有先剪掉“_”)

我怎么能在java上做到这一点?

4

3 回答 3

2

您也可以在 is 之后添加一个锚点并匹配下划线。在替换中使用空字符串。

^[^_]*_

正则表达式演示| Java 演示

使用 replaceFirst 您可以省略锚点:

System.out.println("IND_FROM_ONE_TO_FIVE".replaceFirst("[^_]*_", ""));

输出

FROM_ONE_TO_FIVE
于 2020-10-06T08:13:08.357 回答
1

您可以使用捕获组来提取您想要的子字符串。

^[^_]+_(.*)

我还尝试在 Java 上测试结果。

import java.util.regex.*;
public class MyClass {
    public static void main(String args[]) {
        String mydata = "BS_FROM_FIVE_TO_TEN";
        Pattern pattern = Pattern.compile("^[^_]+_(.*)");
        Matcher matcher = pattern.matcher(mydata);
        if (matcher.find())
        {
            System.out.println(matcher.group(1));
        }
    }
}

结果

FROM_FIVE_TO_TEN
于 2020-10-06T14:44:41.610 回答
0

您可以使用匹配而不是替换:从此正则表达式(多行)中获取第一个也是唯一一个捕获:(^\d+\.[^_]+_(.*)$https://regex101.com/r/Y3Ztv4/1

于 2020-10-06T09:01:05.977 回答