我正在制作程序来模拟文本中的电话号码。
我正在加载此文字:
(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; \\.*
'由' +
'代替,表达式按我的意愿运行。或者,如果我只是删除*
(并且很乐意找到仅由一个句点分隔的两组数字),则表达式可以正常工作。
答案 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}}不需要转义。