以空格和第一个字符开头的正则表达式匹配行是非数字的

时间:2018-02-23 19:34:32

标签: regex notepad++

我正在尝试创建一个只匹配以空格开头的行的正则表达式,然后将1-4个非数字作为第一个字符,然后在数字后面至少有一个或多个空格。这个正则表达式的目的是在Notepad ++的“查找和替换”选项中使用它来删除任何不以空格开头的行,然后将一个数字作为行中的第一个字符。

我现在拥有的是允许我匹配以空格开头的行,并跟随一组数字和另一个空格。但是,这些是我想要保留的行。如何修改以下正则表达式,以便它匹配除这些行之外的所有其他内容?

/^([\s]+\d[\s]|[\s]+\d\d[\s]|[\s]+\d\d\d[\s])/gm

以下是我们正在使用正则表达式的数据示例。正则表达式应仅匹配不以1,2,49,50,99和100开头的行。请注意,以“40th”和“5/23/2017”开头的行应匹配。

                                                                      Page 1
          40th Marathon and 25th Marathon Relay
5/23/2017      USATF Certified Marathon (#RE98723UB)      Downtown/City, ST
Timing: Race Services    See our Calendar of Events at www.website.com
             Results questions: http://www.website.com/fixresults
=====================================================================================
                 **** FINAL RESULTS IN NETTIME ORDER ****
Place Div/Tot  Div   Halfway 22miles Guntime  Nettime Pace  Name   
===== ======== ===== ======= ======= =======  ======= ===== =======
    1   1/153  M0139 1:15:08 2:05:50 2:29:20   2:29:20  5:42 Eric
    2   2/153  M0139 1:15:07 2:06:29 2:29:56*  2:29:56  5:44 Bryan
Record 2:17:35 by Randy in 1986
   49   8/77   M4049 1:36:48 2:54:03 3:37:02   3:36:59  8:17 Joshua
   50  28/153  M0139 1:49:45 3:03:56 3:37:38#  3:37:22  8:18 Brian
# Under USATF OPEN guideline
   99   1/16   M6069 1:56:30 3:15:24 3:51:06   3:50:46  8:49 Paul
  100   3/35   F5059 1:50:06 3:11:37 3:51:03   3:50:47  8:49 Ashley
  101   4/35   F5059 1:55:26 3:16:37 3:56:03   3:55:57  9:14 Joan
* Under USATF Age-Group guideline
% For an Explanation of AgeGraded Percentages, See Here: http://www.website.com/agegrading

因此,如果我们在Notepad ++中使用正则表达式来查找匹配的字符串/行并替换(删除)它们,那么所需的最终结果将如下所示(换句话说,以下行与正则表达式不匹配):

    1   1/153  M0139 1:15:08 2:05:50 2:29:20   2:29:20  5:42 Eric
    2   2/153  M0139 1:15:07 2:06:29 2:29:56*  2:29:56  5:44 Bryan
   49   8/77   M4049 1:36:48 2:54:03 3:37:02   3:36:59  8:17 Joshua
   50  28/153  M0139 1:49:45 3:03:56 3:37:38#  3:37:22  8:18 Brian
   99   1/16   M6069 1:56:30 3:15:24 3:51:06   3:50:46  8:49 Paul
  100   3/35   F5059 1:50:06 3:11:37 3:51:03   3:50:47  8:49 Ashley
  101   4/35   F5059 1:55:26 3:16:37 3:56:03   3:55:57  9:14 Joan

非常感谢任何协助。

1 个答案:

答案 0 :(得分:1)

See regex in use here

^(?! +\d+ ).*\n*
  • ^在行首处断言位置
  • (?! +\d+ )否定前瞻确保后面的内容不是一个或多个空格,而是一个或多个数字,然后是空格
  • .*任意次数匹配任何字符(\n除外)
  • \n*匹配任意数量的换行符

结果:

    1   1/153  M0139 1:15:08 2:05:50 2:29:20   2:29:20  5:42 Eric
    2   2/153  M0139 1:15:07 2:06:29 2:29:56*  2:29:56  5:44 Bryan
   49   8/77   M4049 1:36:48 2:54:03 3:37:02   3:36:59  8:17 Joshua
   50  28/153  M0139 1:49:45 3:03:56 3:37:38#  3:37:22  8:18 Brian
   99   1/16   M6069 1:56:30 3:15:24 3:51:06   3:50:46  8:49 Paul
  100   3/35   F5059 1:50:06 3:11:37 3:51:03   3:50:47  8:49 Ashley
  101   4/35   F5059 1:55:26 3:16:37 3:56:03   3:55:57  9:14 Joan