如何用正则表达式匹配编号列表中的行



我要搜索以下所有行:

  • 以数字重复开头(一次或多次)
  • 这个数字重复符后面没有点和空白字符
  • 在数字重复后加一个点或一个字母都可以

给行
1. TEST 1 : DataLogFile
11. TEST 2 : Inter Citro File
111. TEST 3 : Inter Citro File
111.TEST4 : Match this
111TEST4 : Match this

预期结果应该只匹配最后两行

111.TEST4 : Match this
111TEST4 : Match this

1。Regex

我尝试使用regex^[0-9]+(?!. ).*只匹配最后一行,因为点后面没有空白字符。

在Regex101中测试

1。实际结果

匹配最后4行

11. TEST 2 : Inter Citro File
111. TEST 3 : Inter Citro File
111.TEST4 : Match this
111TEST4 : Match this

2。Regex like answered

当我尝试SaSkY第一响应^d+.S.*时,它只匹配有数字的行,然后是点,然后是无空,最后是字符。看到演示

但是对于数字后面没有点的输入,它将不匹配。虽然预计也匹配111TEST4 : Match this.

试试这个:

^d+(?:.S|[A-Za-z]).*
  • ^起始行。

  • d+一个或多个数字。

  • (?:.S|[A-Za-z])非捕获组:

    • .a literal dot..
    • S除空白字符外的任意字符。
    • |or .
    • [A-Za-z]a字母。
  • .*0个或多个字符。

参见regex demo

您可以尝试:

^(d)1*+(?!.?s+).*$

Regex演示。


或者如果您只想在开头使用数字(而不是重复数字,例如111):

^d++(?!.?s+).*$

你应该在询问之前清楚地说明你的期望。

如果你喜欢

  • match: any ';identifier ';以数字(如1Hello)或序数(如2.World)为前缀的单词
  • 但不:包含空格的短语,如编号列表项(例如1. Hello
  • )

顺序构建的简单正则表达式

然后^d+.?[a-zA-Z].*

匹配:

111.TEST4 : Match this
111TEST5: Match this
111test6: Match this

但不包括那些内部有分隔空格的编号列表项。它也不匹配任何以字母开头的东西。不匹配:

1. TEST 1 : DataLogFile
11. TEST 2 : Inter Citro File
111. TEST 3 : Inter Citro File
test7: should not match

💡️因此,您可以将此正则表达式应用于过滤器的行.

看到演示

说明顺序

  1. ^begin of line
  2. d+至少一个或多个数字(一个数字)
  3. .?一个可选的点(原始点需要用反斜杠转义!)
  4. [a-zA-Z]范围内的任意字母(小写或大写)
  5. .*其他任何内容(此处未转义的点具有特殊含义"任何字符")

最新更新