有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

正则表达式如何使用java查找中间有空格的数字的正则表达式模式

这是我想要匹配的正则表达式

5 9 5 4 1 9 9 2 2 1 4 7 3 there is a single space in between every number and a double number in between the for digit and the five digit number .

这就是我试图解决它的方法

    ([0-9\\s]|[0-9]){4}[\\s]([0-9\\s]|[0-9]){5}[\\s]([0-9\\s]|[0-9]){4} 

谁能告诉我我错过了什么


共 (1) 个答案

  1. # 1 楼答案

    建议正则表达式

    正则表达式

    ((?:\d\s*)*)
    

    如果能做到这一点,它会找到尽可能多的由任意数量的空格分隔的单位数

    分解你的正则表达式来解释

    看看这个世界的不同部分

    ([0-9\\s]|[0-9]){4}[\\s]([0-9\\s]|[0-9]){5}[\\s]([0-9\\s]|[0-9]){4} 
    

    首先:([0-9\\s]|[0-9]){4} 相当于[0-9\\s]{4},即:0和9之间的任何数字一个空格正好4次。这将匹配字符串的前4个字符(2个数字和2个空格)

    其次:[\\s]直接等同于\\s,因为“s”中的任何字符都等于“\s”

    正则表达式的其余部分遵循相同的结构

    建议的修复方法

    因此,我建议清理正则表达式:

    [0-9\s]{4}\s[0-9\s]{5}\s[0-9\s]{4}
    

    虽然我想你想写的是:

    (?:[0-9]\s?){4}\s(?:[0-9]\s?){5}\s(?:[0-9]\s?){4}
    

    哪个匹配(按顺序):

    1. 由一个空格分隔的4位数字,或没有空格
    2. 1空白
    3. 5位数字之间有一个空格或没有空格
    4. 1空白
    5. 由一个空格分隔的4位数字,或没有空格

    但我认为你最好使用上面的正则表达式,因为它更灵活地查找由任意数量的空格分隔的数字组合

    结论

    我认为你的错误是把[]()混淆了[]将匹配其中的任何字符,()将按照指定的顺序匹配所有字符

    此外,量词?表示1或0,使用起来比or运算符更快/更清晰