使用正则表达式 (Python),我想捕获一个组 \d-.+?
,紧接着是另一个模式 \sLEFT|\sRIGHT|\sUP
。
这是我的测试集(来自 http://nflsavant.com/about.php ):
(9:03) (SHOTGUN) 30-J.RICHARD LEFT GUARD PUSHED OB AT MIA 9 FOR 18 YARDS (29-BR.JONES; 21-E.ROWE).
(1:06) 69-R.HILL REPORTED IN AS ELIGIBLE. 33-D.COOK LEFT GUARD TO NO 4 FOR -3 YARDS (56-D.DAVIS; 93-D.ONYEMATA).
(3:34) (SHOTGUN) 28-R.FREEMAN LEFT TACKLE TO LAC 37 FOR 6 YARDS (56-K.MURRAY JR.).
(1:19) 22-L.PERINE UP THE MIDDLE TO CLE 43 FOR 2 YARDS (54-O.VERNON; 51-M.WILSON).
我最好的尝试是 (\d*-.+?)(?=\sLEFT|\sRIGHT|\sUP)
,除非其他字符出现在匹配的捕获组和我的肯定之间展望。在我的测试集的第二行中,此表达式捕获“69-R.HILL REPORTED IN AS ELIGIBLE.33-D.COOK”。而不是所需的“33-D.COOK”。
我的输入也保存在 regex101 中,此处:https://regex101.com/r/tEyuiJ/1
我如何修改(或完全重写)我的正则表达式以仅捕获紧随其后的精确正向前瞻的组,并且两者之间没有额外的字符?
最佳答案
要防止跳过数字,请使用 \D
non-digit (上层被取反 \d
)。
\b(\d+-\D+?)\s(?:LEFT|RIGHT|UP)
See this demo at regex101
又加了一个word boundary并将先行更改为group .
https://stackoverflow.com/questions/74967919/