具有两种可能性正则表达式的子串

时间:2017-04-24 13:41:19

标签: python regex

我从网页中提取了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

注意,我必须将它应用于许多页面,并且页面中可能还有更多这些页面。无法手动或通过明确指示列表中的条目来执行任何操作。

2 个答案:

答案 0 :(得分:3)

有几件事你似乎错过了不合格的运算符?,以便强制正则表达式在找到第一个匹配项后停止搜索。此外,您可以使用[]检查多个字符(请参阅以下内容)。这将是新代码:

(?:l'article)\s\d+\w+.*?[;,]

Regex101:

https://regex101.com/r/tYkNHK/1

答案 1 :(得分:2)

您可以大量简化正则表达式:

  • (?:l'article) - >没有非捕获组,所以你可以删除它
  • \s\d+\w+ - >检查\w+似乎毫无意义(特别是因为这匹配没有字母的数字),所以我认为你可以删除它。或者你缺少一个匹配的空格字符,例如1382 du
  • .*;要匹配,;以外的任何内容,您只需使用一个否定的字符类,例如[^;,]*,它将匹配那些不是其中之一的所有内容。< / LI>

所以你的最终正则表达式可能是

l'article\s\d+[^;,]*

l'article\s\d+\s\w+[^;,]*