gpt4 book ai didi

python - 仅当之前出现特定字符时才匹配字符的正则表达式(条件正则表达式)

转载 作者:太空狗 更新时间:2023-10-30 01:51:43 25 4
gpt4 key购买 nike

开发移动(以色列)电话号码正则表达式。目前我有

re.compile(r'^[\(]?0?(5[023456789])\)?(\-)?\d{7}$')

它捕获了大多数用例。问题是仅当第一个括号出现时才匹配第二个括号。

所以 (055)-5555555 或 (055)5555555 或 0555555555 将匹配但是:055)-5555555 不会。我知道我可以使用 2 个正则表达式来测试条件(如果第一个匹配测试另一个条件)但这似乎不是一个明智的解决方案。

我想我需要类似正则表达式的东西,但不确定如何使用它,或者我是否正确理解了这个概念

编辑:解释逻辑

区号:应以 5 开头,然后是一位数字(来自特定列表),前面有一个选项零。也可能会在括号内。然后是一个可选的连字符和 7 位数字

说明:只有当另一个括号存在时,我才需要匹配两个括号,第一个括号也是如此,而不仅仅是第二个括号,错过了这一点

最佳答案

首先您必须捕获左括号,然后使用 conditional pattern (我知道链接指向 php.net,但我发现它在引用正则表达式时很有用,它还包括一个与您的情况完全匹配的示例)只有在第一个左括号匹配时才会应用。

模式..

^(\()?0?(5[02-9])(?(1)\))-?(\d{7})$

匹配:

(055)-5555555
(055)5555555
0555555555

不是:

055)-5555555

捕获的组

  1. 左括号(如果找不到则为空)
  2. 区号(例如 55)
  3. 电话号码(例如 5555555)

工作原理

(\()? 部分匹配左括号。它是可选的。

部分 (?(1)\)) 检查第一个捕获的组(在我们的例子中是左括号)是否匹配,如果 YES 则字符串必须也匹配右括号。

如果没有找到左括号,条件将被忽略。

关于python - 仅当之前出现特定字符时才匹配字符的正则表达式(条件正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15309179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com