带两种可能regex的子串

2024-04-26 13:51:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我从网页中提取了一个长字符串。使用:

 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 ;

但是,后者有点长。我所需要的就是','了。有没有直接的方法?因此,让我原来的regex命令根据它首先遇到的命令查找“;”或“,”。你知道吗

如果没有,我可以将regex应用到一个列表中,还是需要为此编写一个循环?你知道吗

所需结果列表:

 l'article 1382 du code civil
 l'article 700 du code de procédure civile

请注意,我必须将此应用于许多页面,而且一个页面中可能会有更多这样的页面。用手或在列表中明确指出条目来做任何事情都是不可能的。你知道吗


Tags: 字符串命令re列表articlecodede页面
2条回答

你可以简化你的正则表达式很多:

  • (?:l'article)->;不需要非捕获组,因此可以将其删除
  • \s\d+\w+->;对\w+的检查似乎毫无意义(特别是当它匹配没有字母的数字时),因此我认为可以删除它。或者缺少要匹配的空格字符,例如1382 du
  • .*;要匹配任何高达,;的字符,您可以简单地使用一个否定字符类,比如[^;,]*,它将匹配所有不属于这些字符的字符。你知道吗

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

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

或者

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

您似乎缺少ungreedy操作符?,以便强制regex在找到第一个匹配项后停止搜索。另外,您可以使用[]检查多个字符(请参阅以下内容)。新代码如下:

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

正则表达式101:

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

相关问题 更多 >