我正在制作一个程序来对文本中的电话号码进行模式匹配。
我正在加载这段文字:
(01111-222222)fdf
01111222222
(01111)222222
01111 222222
01111.222222
进入一个变量,并使用“findall”返回这个:
('(01111-222222)', '(01111', '-', '222222)')
('\n011112', '', '\n', '011112')
('(01111)222222', '(01111)', '', '222222')
('01111 222222', '01111', ' ', '222222')
('01111.222222', '01111', '.', '222222')
这是我的表情:
ex = re.compile(r"""(
(\(?0\d{4}\)?)? # Area code
(\s*\-*\.*)? # seperator
(\(?\d{6}\)?) # Local number
)""", re.VERBOSE)
我不明白为什么 '\n' 会被捕获。
如果 '\\.*
' 中的 *
被替换为 '+
',表达式将按我想要的方式工作。或者,如果我简单地删除 *
(并乐于找到仅由一个句点分隔的两组数字),则该表达式有效。
最佳答案
\s
匹配水平 和垂直 空白符号。如果您有 re.VERBOSE
,则可以将普通空格与转义空格 \
匹配。或者,您可以使用 [^\S\r\n]
从 \s
中排除 \r
和 \n
> 以匹配水平空格。
使用
ex = re.compile(r"""(
(\(?0\d{4}\)?)? # Area code
([^\S\r\n]*-*\.*)? # seperator ((HERE))
(\(?\d{6}\)?) # Local number
)""", re.VERBOSE)
参见 regex demo
此外,字符类之外的-
不需要转义。
关于python - 正则表达式查找 '\n',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40016950/