2012-04-14 86 views
3

我想提取一些数字是不跟星,这里是例子:匹配字符

1 
0 
0*1543 
27 123*5464 
11 1007* 
998*7586 
13 
997*686 

我已经使用这个正则表达式尝试多一些,但没有一次成功:

(\d+)[^\*] 

我在找的是得到所有数字,除非它们后面跟着一颗星星。这里是如何输出应该是这样的:

1 
0 
27 
11 
13 

我的计划是写正则表达式和使用组来提取这些值。我正在使用this site来测试我的正则表达式。

更新: 我不寻找匹配*后的数字,这意味着我只想在行首的数字。感谢

更新II:

Aftert进一步diging成(从Dr.Kameleon)

(?<!\*)(?<![0-9])([0-9]+(?!\*)(?![0-9])) 

我得到一个额外的匹配由正则表达式匹配给出,因为它可以在这里看到:

http://regexr.com?30l69

我不想匹配505222*123 505。所有其他比赛都完美匹配。

貌似这个表达式需要小的调整,但我无法调整它即(?<!\*)(?<![0-9])(?<!\\s)([0-9]+(?!\*)(?![0-9]))

回答

5

试试这个:(演示:http://regexr.com?30l47

([0-9]+(?!\*)(?![0-9])) 

或本(如果你想只是第一部分,如在你的例子) - http://regexr.com?30l4a

(?<!\*)(?<![0-9])([0-9]+(?!\*)(?![0-9])) 
+0

这几乎就是它,只是我不想匹配*之后的数字,这意味着我只需要在行首的数字。谢谢 – London 2012-04-14 20:39:01

+0

@伦敦看看;我刚刚更新了它。 ;-) – 2012-04-14 20:39:21

+1

@London当然,我想,你想要的也可以通过用'“*”'和'“”'(空格)分割字符串然后得到数组的第一个元素来完成......但是我决不是一个java大师,所以我会把它留给你... :-) – 2012-04-14 20:40:29