正则表达式发现' \ n'

时间:2016-10-13 09:18:24

标签: python regex

我正在制作程序来模拟文本中的电话号码。

我正在加载此文字:

(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'正被抓住了。

如果*在&{39; \\.*'由' +'代替,表达式按我的意愿运行。或者,如果我只是删除*(并且很乐意找到仅由一个句点分隔的两组数字),则表达式可以正常工作。

1 个答案:

答案 0 :(得分:4)

re.VERBOSE匹配水平 veritcal 空白符号。如果您有\ ,则可以将普通空格与转义空格\r匹配。或者,您可以将\n\s[^\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

此外,字符类外的{{1}}不需要转义。