有两种可能性的子字符串正则表达式
问题描述:
我从网页中提取了一个长字符串。使用:有两种可能性的子字符串正则表达式
x=re.findall(r"(?:l'article)\s\d+\w+.*;", xpath)
它提取以下2个字符串:
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 ;
然而,后者是有点长。我所需要的就是'''。有没有办法直接做到这一点?所以我的原始正则表达式命令查找';'或','的基础上,它遇到的第一个。
如果不是,我可以将正则表达式应用于列表,还是我需要为此编写一个循环?
所需取得的成果与列表:
l'article 1382 du code civil
l'article 700 du code de procédure civile
注意,我有这个适用于许多页面,并可能有更多的这些在一个页面中。手动或通过在列表中明确指定条目来做任何事情都是不可能的。
答
一些东西,你似乎错过了非常规操作符?
,以强制正则表达式在找到第一个匹配项后停止搜索。此外,您可以使用[]
(请参阅以下内容)检查多个字符。这里将是新代码:
(?:l'article)\s\d+\w+.*?[;,]
Regex101:
答
您可以简化您的正则表达式很多:
-
(?:l'article)
- >没有必要非所以你可以删除它 -
\s\d+\w+
- >检查\w+
似乎相当毫无意义(特别是因为这匹配数字没有字母),所以我认为你可以删除它。或者你缺少一个空格字符以匹配例如1382 du
-
.*;
匹配任何最大为,
或;
您可以简单地使用否定字符类,如[^;,]*
这将匹配所有不属于那些的东西。
因此,最终的正则表达式可能是要么
l'article\s\d+[^;,]*
或
l'article\s\d+\s\w+[^;,]*
为什么不'[;,]'?使用're.findall'时,您的代码将只在您创建捕获组时才会返回';'或','。 –
@SebastianProske更新了代码,感谢您的输入。 – Neil
谢谢。我原本以为这是你以前提供的?(; |,)答案。但是这提供了一个列表;和,。 (对不起,我没有提供自己的尝试来解决这个问题)。谢谢你解释为什么发生这种情况@SebastianProske。 – Peter