我有一个字符串变量,并希望从中提取一个值。Java的正则表达式不工作 - 字符串拆分
String LB0001 = "LB0001";
String[] splitString = LB0001.split("LB(.*)");
我所期待的是,splitString
将包含两个值,["LB0001",["0001"]]
。但结果为空。为什么?我检查了正则表达式,似乎是正确的。
我想提取“0001”。我可以用其他方式做,但想知道我在这里做错了什么。
我有一个字符串变量,并希望从中提取一个值。Java的正则表达式不工作 - 字符串拆分
String LB0001 = "LB0001";
String[] splitString = LB0001.split("LB(.*)");
我所期待的是,splitString
将包含两个值,["LB0001",["0001"]]
。但结果为空。为什么?我检查了正则表达式,似乎是正确的。
我想提取“0001”。我可以用其他方式做,但想知道我在这里做错了什么。
split
方法将在正则表达式匹配的地方进行拆分。在你的情况下,表达式LB(.*)
完全匹配提供的字符串,因此你没有得到任何回报。
如果你想获得数字部分,你可以分裂任何非数字的东西,如:.split("\\D")
。这应该会得到1个包含0001
的元素。
编辑:如果你想LB
后任何你就需要使用Pattern
和Matcher
类。所以基本上像这样:
String str = "LB0001";
Pattern p = Pattern.compile("LB(.*?)");
Matcher m = p.matcher(str);
while(m.find())
System.out.println(m.groups(1));
以上将使用正则表达式来寻找随后LB
任何文本。如果您有这样的事情,我已将其从.*
更改为.*?
:LB001LB333
。额外的?
使得表达式不贪婪。
试试这个
String LB0001 = "LB0001";
String[] splitStringAlpha = LB0001.split("[a-zA-Z]+");
System.out.println(splitStringAlpha[0]);
String[] splitStringNum = LB0001.split("\\D");
System.out.println(splitStringNum[0]);
这应该给你
LB
0001
\ w代表“单词字符”,通常为[A-Za-z0-9_],所以'LB0001.split(“\\ W”); '返回LB0001 –
感谢您的检查。我做了更新 – AbtPst
谢谢。然而我理解,我使用http://myregexp.com/来测试我的正则表达式。当在网站上测试时,正则表达式分为两组,第一组是完整的字符串匹配,第二组是“LB”之后的任何东西。是否有在Java中的功能,会给我一个类似的结果? –
@RoryLester:我试图更新我的结果。 – npinti
谢谢,我最终做了类似的事情。已标记为解决方案 –