正则表达式通过字符匹配模式

Regex match Pattern through Characters

我有一个模式:(^([-]?\d+([.]\d+)?,){6}([10],)([-]?\d+([.]\d+)?)$) 匹配:"26.9841,300.007666,4,1,0,15,1,0" 这就是我想要的,但是我的模式与以下字符串不匹配:

  1. "26 . 9841,300 . 007666,4,1,0,15,1,0"
  2. "26.9841\n,300.007666\n,4,\n1,0,15,1,0"
  3. "2 6 . 9 8 4 1 ,\n 3 0 0 .0 0 7 6 6 6 , 4 \n, 1 , 0 , 1 5 , 1 , 0"

这是完全相同的字符串,只是插入了随机空格和换行符。

我可以匹配具有以下模式的那些:

(^([-]?\s*?\n*?[0-9 ]+\s*?\n*?(\s*?\n*?[.]\s*?\n*?[0-9 ]+\s*?\n*?)?\s*?\n*?,\s*?\n*?){6}([10]\s*?\n*?,)(\s*?\n*?[-]?\s*?\n*?[0-9 ]+\s*?\n*?([.]\s*?\n*?[0-9 ]+\s*?\n*?)?)$)

匹配1、2、3,但是这种模式很荒谬,很可能可以简化,并且不匹配所有换行; (它不会匹配 [0-9]+ (+) 块中出现的换行符)。它也只是拍打“\s*?\n*?”只要有可能。

问题

我想知道有没有办法通过这些字符进行匹配。忽略它们的出现,只要你能说,如果它们不存在,模式就会匹配。

注:

输入字符串应匹配:((Decimal|Int),{6}(1|0),(Decimal|Int))
如果换行符出现在模式的末尾,则假设找不到更多输入。
我无法从输入字符串中删除这些字符,因为我需要知道它们在那里。
我不关心前导或尾随 spaces/new-lines
模式将始终以 "-""[0-9]" 开头(是的,0 可以是第一个字符)
模式总是以 [0-9]

结尾
编辑

这个正则表达式有效并通过了我的测试套件:(^(-?\s*[0-9]\s*[\s.0-9]*,){6}(\s*[10]\s*,)(\s*-?\s*[0-9][\s.0-9]*?)$)

如果您希望进行更多验证的测试,
这样比较合适。
然而,任何时候你穿插 white space \s 在正则表达式中构造
当这看起来像您的大部分数据时,将相似的集群分开 (?:\s*\d)+
存在无法结束搜索的风险。
这个特定的正则表达式可能会起作用。

^\s*((?:\s*[-]?(?:\s*\d)+(?:\s*[.](?:\s*\d)+)?\s*,){6}\s*[10]\s*,\s*[-]?(?:\s*\d)+?(?:\s*[.](?:\s*\d)+?)?)$

https://regex101.com/r/YmKJgW/1
捕获组 1 是一种方便的方法,可以从比赛中去除前导白色 space。

 ^ 
 \s* 
 (                             # (1 start)
    (?:
       \s* [-]?  
       (?: \s* \d )+
       (?:
          \s* [.]  
          (?: \s* \d )+
       )?
       \s* ,
    ){6}
    \s* 
    [10] \s* , \s* 
    
    [-]?  
    (?: \s* \d )+?
    (?:
       \s* [.]  
       (?: \s* \d )+?
    )?
 )                             # (1 end)
 $