Regex 匹配任意字符,直到看到这串圆点

Regex 匹配任意字符,直到看到这串圆点,regex,Regex,我有以下数据集 1.1.7 Ensure separate partition exists for /var/tmp (Scored) ...................................... 40 1.1.8 Ensure nodev option set on /var/tmp partition (Scored) ................................... 42 1.1.9 Ensure nosuid option

我有以下数据集

    1.1.7 Ensure separate partition exists for /var/tmp (Scored) ...................................... 40
    1.1.8 Ensure nodev option set on /var/tmp partition (Scored) ................................... 42
    1.1.9 Ensure nosuid option set file.ext (Scored) .................................. 43
    1.1.10 Ensure noexec option set on /var/tmp partition (Scored) ............................... 44
    1.1.11 Ensure separate partition exists for /var/log (Scored) ..................................... 45
    1.1.12 Ensure separate partition exists for /var/log/audit (Scored) ......................... 47
    1.1.13 Ensure separate partition exists for /home (Scored) ......................................... 49
1.7.1.7 Ensure the MCS Translation Service (mcstrans) is not installed (Scored)\n
.............................................................................................................................................................. 105
我想提取数字(x.x.x.x),然后是文本,即下面的

1.1.13 Ensure separate partition exists for /home (Scored) ......................................... 49
我希望group1=1.1.13,group2=确保/home(已评分)存在单独的分区

我可以毫无问题地退出第一组,但我正在与第二组作斗争,因为有些文本包含一个问题。除此之外,我还想捕获一些行在第二个组中包含新行字符,因此“.”也不起作用,这是我的正则表达式

^[ ]?(\d(?:[.]|\d|[ ])+)([^.]+) 
^\s*((?:\d+\.?)+)\s+(.*?\n?.*?)[\.]{3}
问题是在第二个捕获组([^.]+)中,我试图做的是“匹配所有内容,直到看到三个点…”,但它不起作用。这是我在没有任何运气的情况下尝试过的

([^.]{3}+)
(?!\.{3})
在看到序列“…”之前,我应该如何捕获任何字符

编辑:

所以,我找到了一种方法,但感觉这不是最好的方法,这是我的正则表达式

^[ ]?(\d(?:[.]|\d|[ ])+)([^.]+) 
^\s*((?:\d+\.?)+)\s+(.*?\n?.*?)[\.]{3}
所以基本上,我是说匹配任何东西(除了一个新行),除非你看到一个新行,在这种情况下,匹配它一次,然后再匹配所有东西,直到你看到“…”。为什么(.|\n)*?不工作?

请尝试以下操作:

^[ ]?(\d(?:[.]|\d|[ ])+)(.*?)[\.]{3}
对于空格,a\s更好:

^\s*((?:\d+\.?)+)\s+(.*?)[\.]{3}
编辑:在“(评分)”之后或“…”之前换行

试试这个:

^([0-9\.]+)\s(((?![.]{3}).)*)

您可以使用锚,而不是贪婪的消耗:

^\s*((?:\d+\.?)+)\s+(.*?)$
在这种情况下,“$”匹配换行符(不包括它)
资料来源:

您可以匹配字符串的开头,后面是不带换行符的可选空格字符和带点和数字可选重复的数字

然后匹配尽可能少的字符,包括换行符,直到遇到3个点

^[^\S\r\n]*(\d+(?:\.\d+)+)\b([\s\S]*?)\.\.\.
  • ^
    字符串的开头
  • [^\S\r\n]*
    可以选择匹配不带换行符的空白字符
  • Capturegroup 1
    • \d+(?:\。\d+)
      匹配1+位,然后重复a
      和1+位
  • )\b
    关闭组1和单词边界
  • 捕获第2组
    • [\s\s]*?
      尽可能地匹配包含换行符的任何字符
  • )\.\.\。关闭组2并匹配
    `

如果要限制后面的行数,可以在同一行上匹配尽可能少的字符,直到遇到
,或者重复1-2次匹配下面不以数字、点和数字开头的行,然后匹配

^[^\S\r\n]*(\d+(?:\.\d+)+)\b(.*?|.*(?:\r?\n(?![^\S\r\n]*\d+\.\d).*?){1,2})\.\.\.

这似乎是你想要的:
^\s*((?:\d+\.?)+)\s+([^.]*)[\.]{3}


谢谢-但这不起作用,因为有些行中有新行字符。我将修改这个问题以反映这一点。@rusty009
^\s*((?:\d+\.?)+)\s+(.*)\n?[\.]{3}
在“(评分的)“之前”之后加上换行符。这只适用于新行在“…”之前的情况。如果新行不在“…”之前,如何捕获它?@rusty009新行在哪里可以无处不在?可以使未换行的点与新行符匹配,因此,也许可以看看它是否适合你。这似乎不起作用,因为它没有捕捉到一条新的线条,而是@rusty009。只需根据我共享的链接使用正确的标志。这不起作用-不会捕获新行。您希望使用哪种语言来使用数据?通常,您不希望在字符串中保留换行符。根据您的编程语言,您还可以按行使用数据并重新匹配正则表达式,-因此请检查PL中的全局和多行正则表达式,可能:-)这不起作用-不会捕获新行。