我似乎无法在比赛中“在球场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)}
答案 0 :(得分:1)
^(?<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
并将more
或less
捕获到指定的捕获组moreless
*
匹配任意数量的空格(?:\bon\s+(?<date>[\d/]+))?
(可选)匹配on
并将日期捕获到指定的捕获组date
中。日期由一个或多个数字和/
*
匹配任意数量的空格(?:\bat\s+(?<venue>(?:(?!\bon\b).)*\S))?
可选择匹配at
并将场地捕获到指定的捕获组venue
中。 venue
组将匹配任何字符,除非出现单词on
。它匹配最后一个非空白字符(因为\S
)
*
匹配任意数量的空格(?:\bon\s+(?<location>.*))?
(可选)匹配on
并将其余部分捕获到指定的捕获组location
$
断言行尾的位置