2024-04-19 14:09:25 发布
网友
我需要创建一个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
我已经试了好几个小时了。。。但没办法解决,真的需要一些帮助
这看起来像是电话号码和分机信息。。 为什么不简化自己(以及以后需要阅读本文的人)并拆分输入,而不是使用复杂的regex?在
s = '999-123-222-...-22&Ns=12' parts = s.split('&Ns=') # splits on Ns and removes it
如果“&;”前面的部分是电话号码,则可以进行另一次拆分,并将区号等放入单独的字段中,如下所示:
可以使用字符串方法isdigit检查可选“&;Ns=”后找到的部分是否为数字,如果字符串中的所有字符都是数字并且至少有一个字符,则返回true;否则返回false。在
if len(parts) > 1: extra_digits_ok = parts[1].isdigit()
如果您只想允许字符串999-123-222-...-22和999-123-222-...-22&Ns=12,那么最好使用字符串函数。在
999-123-222-...-22
999-123-222-...-22&Ns=12
如果要允许-之间的任何数字,可以使用regex:
-
^(\d+-){3}[.]{3}-\d+(&Ns=\d+)?$
如果数字必须只有3位数,最后一个数字只有2位数,则可以使用:
不确定您是否希望逐字匹配999-123-22-...-22,或者是否可以是任何数字/破折号序列。以下是两种不同的正则表达式:
999-123-22-...-22
/^[\d-]+(&Ns=\d+)?$/ /^999-123-222-\.\.\.-22(&Ns=\d+)?$/
关键思想是(&Ns=\d+)?$部分,它匹配一个可选的&Ns=<digits>,并将{}锚定到字符串的末尾。在
(&Ns=\d+)?$
&Ns=<digits>
这看起来像是电话号码和分机信息。。 为什么不简化自己(以及以后需要阅读本文的人)并拆分输入,而不是使用复杂的regex?在
如果“&;”前面的部分是电话号码,则可以进行另一次拆分,并将区号等放入单独的字段中,如下所示:
^{pr2}$可以使用字符串方法isdigit检查可选“&;Ns=”后找到的部分是否为数字,如果字符串中的所有字符都是数字并且至少有一个字符,则返回true;否则返回false。在
如果您只想允许字符串
999-123-222-...-22
和999-123-222-...-22&Ns=12
,那么最好使用字符串函数。在如果要允许
-
之间的任何数字,可以使用regex:如果数字必须只有3位数,最后一个数字只有2位数,则可以使用:
^{pr2}$不确定您是否希望逐字匹配
999-123-22-...-22
,或者是否可以是任何数字/破折号序列。以下是两种不同的正则表达式:关键思想是}锚定到字符串的末尾。在
(&Ns=\d+)?$
部分,它匹配一个可选的&Ns=<digits>
,并将{相关问题 更多 >
编程相关推荐