正则表达式仅匹配从左到右读取的最后一次出现

时间:2017-03-10 14:22:57

标签: python regex python-3.x

我有这个字符串。

Votre vol : Casablanca - Paris Mercredi 31 août 2016 AF1197 - Ecoi 7 septembre 2016 AF1196 - Economy 15:20 Paris , Charles de Gaulle (CDG) , FRANCE - Terminal 2E Heure Limite d'Enregister un supplément.

使用以下正则表达式

(?:Votre vol|Your flight)(.*?([0-9]{1,2}\s[^\s]+?\s[0-9]{4}))+

我想在不同的群组中捕获31 août 20167 septembre 2016

如果我删除了捕获第一个日期的最后日期。

(Python Flavor)

Regex101 link

1 个答案:

答案 0 :(得分:1)

由于无法使用re将所有捕获的子字符串保留在组中,因此您无法遵循以下两步流程:

  • 使用当前的正则表达式提取子字符串
  • 然后,使用re.findall(r'\b[0-9]{1,2}\s+\S+\s+[0-9]{4}\b', s)等子模式提取日期(请参阅regex demo)。

使用PyPi regex模块,您可以使用1遍方法获得所有必要的结果,因为该库存储了每个组的所有捕获。

关于正则表达式的一个小注释:[^\s]+?\s可以写为\S+\s,因为[^\s]匹配除空白之外的任何字符,而+?延迟量词会使匹配有点比贪婪的+\s\S+\s是相反的速记字符类,所以function getCombinations(array, sum, max) { function fork(i, t) { var s = t.reduce(function (r, a) { return r + a[2]; }, 0); if (s >= sum) { result.push([s, t.map(function (a) { return [a[1], a[2]]; })]); return; } if (i < array.length && t.length < max) { fork(i + 1, t.concat([array[i]])); fork(i + 1, t); } } var result = []; fork(0, []); return result; } var electionResultsData = [["VVD", "vvd", 50, 2504948], ["PVDA", "pvda", 40, 2340750], ["PVV", "pvv", 35, 950263], ["CDA", "cda", 33, 801620], ["SP", "sp", 29, 909853], ["D66", "d66", 26, 757091], ["GL", "gl", 26, 219896], ["CU", "cu", 23, 294586], ["SGP", "sgp", 21, 196780], ["PVDD", "pvdd", 21, 182162], ["50PLUS", "50plus", 21, 177631], ["OVERIG", "overig", 20, 51463], ["PIRATEN", "piraten", 20, 30600], ["LP", "lp", 16, 3335], ["PVDM", "pvdm", 15, 3257], ["JEZUSLFT", "jezuslft", 14, 0], ["ONDRNMR", "ondrnmr", 14, 0], ["LOKAAL", "lokaal", 13, 0], ["ARTIKEL1", "artikel1", 11, 0], ["GEENPEIL", "geenpeil", 11, 0], ["VRIJP", "vrijp", 9, 0], ["BURGBEW", "burgbew", 9, 0], ["FVD", "fvd", 8, 0], ["VDP", "vdp", 8, 0], ["NIEUWEW", "nieuwew", 6, 0], ["DENK", "denk", 5, 0], ["STEMNL", "stemnl", 4, 0], ["VNL", "vnl", 2, 0]], result = getCombinations(electionResultsData, 76, 6); document.getElementById('out').appendChild(document.createTextNode(JSON.stringify(result, 0, 4)));在这里是最佳的。)