Python 正则表达式工作错误,匹配意外事件
我有一个正则表达式:Python 正则表达式工作错误,匹配意外事件,python,regex,Python,Regex,我有一个正则表达式: [\(\+\[]?[0-9]([\-\)\.\/-\]]?\s?\(?[0-9\s\)]){8,20}? 它必须只匹配电话号码,但也匹配以下内容: [95.86.22.137] 95.86.22.137 (192.168.1.94) 274.1363525390625px;"> 2014-8-720:32:45 有人能帮我纠正一下这个正则表达式吗?如果你真的想纠正这个问题,我会重新开始,首先确定你想要匹配的模式,这在你的正则表达式中并不明显,也不在你的问题中-只是
[\(\+\[]?[0-9]([\-\)\.\/-\]]?\s?\(?[0-9\s\)]){8,20}?
它必须只匹配电话号码,但也匹配以下内容:
[95.86.22.137]
95.86.22.137
(192.168.1.94)
274.1363525390625px;">
2014-8-720:32:45
有人能帮我纠正一下这个正则表达式吗?如果你真的想纠正这个问题,我会重新开始,首先确定你想要匹配的模式,这在你的正则表达式中并不明显,也不在你的问题中-只是你不想要的。你需要把它看作是“我想要什么?”,而不是“我想排除什么?”。按照“我想要什么?”的方式去做,你所需要的将消除所有那些讨厌的其他可能性 您必须首先决定接受什么样的“有效电话号码”。请记住,即使在NANP(北美编号计划)中,也有以下几种不同的格式:
- XXX-XXX-XXXX或
- XXX XXX-XXXX或
- 1-XXX-XXX-XXXX或
- (三十) XXX-XXXX或
- +(三十) XXX-XXXX或
- 1(XXX)XXX-XXXX
- 您只接受NANP号码,还是接受该标准以外的其他号码
- 你会接受“+”还是让他们写国际代码?如果您需要代码,您的用户将输入的国家/地区的代码是否有一组数字?如果他们输入代码,您的正则表达式是否能够处理(如果可以接受)或红旗(如果不可以接受)
- 你会在区号周围加上括号,只是允许(让括号成为可选的),还是干脆拒绝
- +(三十) XXX-XXXX
- 1(XXX)XXX-XXXX
- (三十) XXX-XXXX
/^(\+|1\s)?[(][2-9]\d{2}[)][\s][2-9]\d{2}-\d{4}$/
/^
=单词开头匹配;基本上只是指示表达式的开始
(\+\124; 1\s)?组
- 括号用于偏移组,并通过末尾的
表示其中的任何字符都是可选的,并允许在其中使用“或”条件(请参见管道字符)?
=转义“+”,以允许在加号上进行匹配(必须转义,因为它是正则表达式中的关键字符,使用反斜杠)\+
=管道字符,表示它应该匹配组中左侧或右侧的字符|
=需要数字1和空格字符。1\s
不需要空间-这对我不起作用,尽管我看到其他帖子似乎表明了这一点。它是[]
\s
[(]
=这是表示需要使用圆括号的方式
[2-9]\d{2}群
=这是为了使表达式与数字2-9匹配。这是因为在NANP中,0和1在区号开头(第一组3个号码)或电话交换机(第二组3个号码)中是无效的号码[2-9]
=这表示允许0-9之间的两位数字。这是\d{2}
的缩写[0-9][0-9]
\d{3}
[)]
=这是表示需要使用闭括号的方式
[\s]
=这需要一个空格
[2-9]\d{2}-\d{4}群
- 连字符前面的第一部分与前面相同
- 在此处设置连字符将需要它。如果您将
,它将是可选的-?
=这表示允许0-9之间的4位数字。这是\d{4}
[0-9][0-9][0-9][0-9][0-9]
$/
=表示匹配单词的结尾;基本上只是表示表达式的结尾
希望这将帮助您构建表达式。您可以使用regex101来调试它。我已经花了半天的时间来调试它,但我无法通过定义电话号码的确切含义,即它应该包含的内容和不应该在此处看到的内容,使它变得完美,可能会有帮助:也许你应该描述一下你来自哪里的电话号码是如何形成的。