python - 正则表达式查找 '\n'

标签 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' 会被捕获。

如果 '\\.*' 中的 * 被替换为 '+',表达式将按我想要的方式工作。或者,如果我简单地删除 *(并乐于找到仅由一个句点分隔的两组数字),则该表达式有效。

最佳答案

\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/

相关文章:

python - 如何忽略 `or` 语句中 `if` 的错误值

r - 在字符串中,如何删除已知 'start' 和 'end' 的一部分?

python - keras lstm 输入形状不正确

python导入错误

python - 如何在 dtype=str 的数据帧上使用 dropna?

javascript - 如何找到给定搜索词周围括号内的所有内容?

c# - 操作字符串 : Removing special characters - Change all accented letters to non accented

php - 如何在 PHP 中使用正则表达式格式化数字

php - 匹配重复的单词

python - 使用 kubernetes 客户端 corev1api 运行 `connect_get_namespaced_pod_exec` 给出错误请求