【问题标题】:Matching characters in Java regexJava 正则表达式中的匹配字符
【发布时间】:2012-04-14 20:30:11
【问题描述】:

我想提取一些不带星号的数字,示例如下:

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

我已经尝试过使用这个正则表达式和其他一些,但它们都不起作用:

(\d+)[^\*]

我正在寻找的是获取所有数字,除非它们后面跟着一个星号。下面是输出的样子:

1
0
27
11
13

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

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

更新二:

之后进一步挖掘正则表达式给出的匹配(来自 Dr.Kameleon)

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

我得到了一个额外的匹配,可以在这里看到:

http://regexr.com?30l69

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

看起来这个正则表达式需要稍微调整,但我无法调整它,即(?&lt;!\*)(?&lt;![0-9])(?&lt;!\\s)([0-9]+(?!\*)(?![0-9]))

【问题讨论】:

    标签: java regex


    【解决方案1】:

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

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

    或者这个(如果你只想要第一部分,就像你的例子一样) - http://regexr.com?30l4a :

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

    【讨论】:

    • 差不多了,只是我不想匹配 * 后面的数字,这意味着我只想要行首的数字。谢谢
    • @London 当然,我想,您也可以通过将字符串拆分为"*"" "(空格)然后获取数组的第一个元素来完成...但我绝不是 Java 大师,所以我会把它留给你...... :-)
    • @London LOL(老实说我讨厌 Java...)。不客气——很高兴能帮上忙! :-)
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多