匹配结束短语与正则表达式

时间:2018-03-28 17:09:52

标签: regex regex-lookarounds

我似乎无法在比赛中“在球场1”结束,它一直与场地捕捉相匹配。 “球场1”是可选的。 “在新奥尔巴尼高中”是场地。有没有办法将结束字符串与我的捕获匹配,而不包括倒数第二个?

^(?<minimum>\d*)(?<dash>-)?(\sor\s(?<moreless>more|less)\s?)?(?<maximum>\d*)((?:on\s|\s)+(?<date>[^\s]*)?)?((?:at\s|\s){1}(?<venue>.*)?)?((?:on\s|\s){1}(?<location>.*)?)?

它应符合以下

1 or more on 3/30/2018 at 3C on 2
1-2 on 3/30/2018 at 3 Court Venue on 2
1 or less on 11/23/1981 at New Albany High School on court 1
1 at 3C on 1

以下是结构

minimum (integer, optional)
("-" or " or less " or " or more ") (optional if max/min are available)
maximum (integer, optional)
on {date} (optional)
at {venue} (optional)
on {court} (optional when venue is available)

{min(-, or more , or less ){max}} {on (date)} {at (venue)} {on (court)}

1 个答案:

答案 0 :(得分:1)

See regex in use here

^(?<minimum>\d+)? *(?<dash>-)? *(?:(?<maximum>\d+)|\bor\s*\b(?<moreless>more|less))? *(?:\bon\s+(?<date>[\d/]+))? *(?:\bat\s+(?<venue>(?:(?!\bon\b).)*\w))? *(?:\bon\s+(?<location>.*))?$
  • ^在行首处断言位置
  • (?<minimum>\d+)?可选择将一个或多个数字捕获到指定的捕获组minimum
  • *匹配任意数量的空格
  • (?<dash>-)?可选择将短划线捕获到指定的捕获组dash
  • *匹配任意数量的空格
  • (?:(?<maximum>\d+)|\bor\s*\b(?<moreless>more|less))?可选择匹配以下任一项
    • (?<maximum>\d+)将一个或多个数字捕获到指定的捕获组maximum
    • \bor\s*\b(?<moreless>more|less)匹配or并将moreless捕获到指定的捕获组moreless
  • *匹配任意数量的空格
  • (?:\bon\s+(?<date>[\d/]+))?(可选)匹配on并将日期捕获到指定的捕获组date中。日期由一个或多个数字和/
  • 组成
  • *匹配任意数量的空格
  • (?:\bat\s+(?<venue>(?:(?!\bon\b).)*\S))?可选择匹配at并将场地捕获到指定的捕获组venue中。 venue组将匹配任何字符,除非出现单词on。它匹配最后一个非空白字符(因为\S
  • *匹配任意数量的空格
  • (?:\bon\s+(?<location>.*))?(可选)匹配on并将其余部分捕获到指定的捕获组location
  • $断言行尾的位置