Regex忽略捕获句子的开始和结束,但忽略中间



我有一个需要捕获以下字符串的正则表达式:

xxx 2018 12833833 19322222 KEY 83 a 84 a 1

2018 12833833 19322222 KEY Q 83 a 84 a 1

2018 12833833 19322222 KEY 0.5—工作良好

2018 12833833 19322222 KEY C 9 83 a 84 a 1—工作良好

我的正则表达式几乎得到他们所有,但有几个是失败的,我正在努力与内部部分(Q在中间一个)

(?P<YEAR>d{4})s(?P<EMPTY>[.S]*)s(?P<KAT>[A-Zd]*)s(?P<POP>[A-Zs]*)s(?P<REST>.*?)(?P<XXX>s(?P<X1>d*)s(?:.{1})s(?P<X2>d*)s(?:.{1})s)?(?P<UNT>[0-9.]*$)

以下是我捕获的错误:#1和#2 - REST捕获POP之后的所有内容,但最后1 (REST不应该捕获任何内容)

我试图强制REST作为?的可选,但它的捕获无论如何

看来你可以试试:

(?P<YEAR>d{4})s(?P<EMPTY>d{8})s(?P<KAT>d{8})s(?P<POP>[A-Z]+(?:s[A-Z]+)?)(?:s(?P<REST>d+))?(?:s(?P<XXX>(?P<X1>d+)s.s(?P<X2>d+)s.))?s(?P<UNT>d+(?:.d+)?)$

看这里的在线演示

  • (?P<YEAR>d{4})- 4位命名捕获组。
  • s-中间空格字符。
  • (?P<EMPTY>d{8})- 8位命名捕获组
  • s-中间空格字符。
  • (?P<KAT>d{8})- 8位命名捕获组
  • s-中间空格字符。
  • (?P<POP>[A-Z]+(?:s[A-Z]+)?)-可选的命名捕获组,至少有1+大写字母和一个可选的包含更多大写字符的空格。
  • (?:s(?P<REST>d+))?-可选非捕获组,包含1+数字的命名捕获组。
  • (?:s(?P<XXX>(?P<X1>d+)s.s(?P<X2>d+)s.))?-另一个可选的非捕获组,包含两个嵌套的命名捕获组。
  • s-中间空格字符。
  • (?P<UNT>d+(?:.d+)?)-命名捕获组捕获1+数字,可选的小数点后面跟着更多数字。
  • $-结束字符串锚。

相关内容

最新更新