我有这个字符串。
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 2016
和7 septembre 2016
。
如果我删除了捕获第一个日期的最后日期。
(Python Flavor)
答案 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)));
在这里是最佳的。)