python:正则表达式,如何匹配一个具有结构并以特定组结尾的未定义长度的字符串

2024-04-19 14:09:25 发布

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

我需要创建一个regexp来匹配像999-123-222-…-22这样的字符串 字符串可以用amp;Ns=(任意数字)来完成,也可以不使用。。。对我来说有效的字符串是

999-123-222-...-22
999-123-222-...-22&Ns=12
999-123-222-...-22&Ns=12

以下无效:

999-123-222-…-22&N=1

我已经试了好几个小时了。。。但没办法解决,真的需要一些帮助


Tags: 字符串数字ampns小时regexp办法
3条回答

这看起来像是电话号码和分机信息。。 为什么不简化自己(以及以后需要阅读本文的人)并拆分输入,而不是使用复杂的regex?在

s = '999-123-222-...-22&Ns=12'
parts = s.split('&Ns=') # splits on Ns and removes it

如果“&;”前面的部分是电话号码,则可以进行另一次拆分,并将区号等放入单独的字段中,如下所示:

^{pr2}$

可以使用字符串方法isdigit检查可选“&;Ns=”后找到的部分是否为数字,如果字符串中的所有字符都是数字并且至少有一个字符,则返回true;否则返回false。在

if len(parts) > 1:
    extra_digits_ok = parts[1].isdigit()

如果您只想允许字符串999-123-222-...-22999-123-222-...-22&Ns=12,那么最好使用字符串函数。在

如果要允许-之间的任何数字,可以使用regex:

^(\d+-){3}[.]{3}-\d+(&Ns=\d+)?$

如果数字必须只有3位数,最后一个数字只有2位数,则可以使用:

^{pr2}$

不确定您是否希望逐字匹配999-123-22-...-22,或者是否可以是任何数字/破折号序列。以下是两种不同的正则表达式:

/^[\d-]+(&Ns=\d+)?$/

/^999-123-222-\.\.\.-22(&Ns=\d+)?$/

关键思想是(&Ns=\d+)?$部分,它匹配一个可选的&Ns=<digits>,并将{}锚定到字符串的末尾。在

相关问题 更多 >