2017-06-20 95 views
1

我有有的Java模式的正则表达式

1-FN3Z1-206329557431 
1-FN411-153115736976 

当我试图删除值的前两个部分列一个2列TSV文件(即提取206329557431153115736976)。我用正则表达式的在线工具来生成模式

模式

".*?\\d+.*?\\d+.*?(\\d+)"".*?\\d+.*?\\d+.*?\\d+.*?(\\d+)"

独立,他们工作得很好。我试图寻找一个组合的正则表达式模式。任何指示如何做到这一点。

+0

你只是想第二个连字符后的一切吗?你只是想跳过前8个字符?什么准确定义你想要捕捉的部分? – khelwood

+0

'String str =“1-FN3Z1-206329557431”; str.substring(str.lastIndexOf(“ - ”));' – john

回答

4

为什么不例如使用split

String spl = "1-FN411-153115736976".split("-")[2]; 

如果你想要一个正则表达式,你可以使用(.*?-){2}(.*),这意味着得到第二个后的所有东西-

regex demo

输出

206329557431 
153115736976 
1

如果您的TSV文件中的字符串都具有相同的宽度和图案,然后你可以用串这里:

String tsv = "1-FN3Z1-206329557431"; 
System.out.println(tsv.substring(8)); 

Demo

+0

W'll,如果我必须把它放在一个正则表达式规则中,怎么会这样做。你提出的那个,肯定有效。我只是想了解如何编写正则表达式 – Betafish

+0

@Betafish更新您的问题并告诉我们关于TSV字符串可能的样子的规则。然后可以写出一个确切的模式。如果它们都是固定的宽度,那么我建议在这里使用子字符串;你不需要正则表达式。 –

1

怎么样这个正则表达式:.-.{5}-看起来像它可以匹配所有的声明,但它取决于你的格式。 Example of pattern work

下面是Java代码示例:

@Test 
public void test() { 
    String test = "1-FN3Z1-206329557431 1-FN411-153115736976"; 

    String result = test.replaceAll(".-.{5}-", ""); 

    assertEquals("206329557431 153115736976", result); 
}