我从网页中提取了1个长字符串。使用:
x=re.findall(r"(?:l'article)\s\d+\w+.*;", xpath)
它提取了以下两个字符串:
l'article 1382 du code civil ;
l'article 700 du code de procédure civile, les condamne à payer à la société Financière du cèdre la somme globale de 3 000 euros et rejette leurs demandes ;
然而,后者有点长。我所需要的只是','。有没有办法直接这样做?因此,我的原始正则表达式命令可以查找&#39 ;;'或者','基于它首先遇到的那个。
如果没有,我可以将正则表达式应用于列表,还是需要为此编写循环?
所需结果列表:
l'article 1382 du code civil
l'article 700 du code de procédure civile
注意,我必须将它应用于许多页面,并且页面中可能还有更多这些页面。无法手动或通过明确指示列表中的条目来执行任何操作。
答案 0 :(得分:3)
有几件事你似乎错过了不合格的运算符?
,以便强制正则表达式在找到第一个匹配项后停止搜索。此外,您可以使用[]
检查多个字符(请参阅以下内容)。这将是新代码:
(?:l'article)\s\d+\w+.*?[;,]
Regex101:
答案 1 :(得分:2)
您可以大量简化正则表达式:
(?:l'article)
- >没有非捕获组,所以你可以删除它\s\d+\w+
- >检查\w+
似乎毫无意义(特别是因为这匹配没有字母的数字),所以我认为你可以删除它。或者你缺少一个匹配的空格字符,例如1382 du
.*;
要匹配,
或;
以外的任何内容,您只需使用一个否定的字符类,例如[^;,]*
,它将匹配那些不是其中之一的所有内容。< / LI>
所以你的最终正则表达式可能是
l'article\s\d+[^;,]*
或
l'article\s\d+\s\w+[^;,]*