python - 捕获具有正面前瞻性但不匹配模式的组的正则表达式

使用正则表达式 (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/

相关文章:

r - 如何将整行作为列名?

c# - Blazor (.net 7) 中的三种依赖注入(inject)语法有区别吗?

python - 什么时候值得在 if-else 语句上使用循环?

c# - 查找过去最近的日期

javascript - 使用 js 正则表达式验证 gsheet/excel 相对范围字符串

haskell - 减少围绕手工包装的 `Num` 类型的样板

powershell - 如何在 PowerShell 方法链接中使用换行符

c# - C# 是否有某种 value_or_execute 或 value_or_throw?

arrays - 如何将数组的元素移动到数组的开头

regex - Linux 提取特定字符串之间的文本