正则表达式在Python中捕获字符串和\n字符之间的数据

正则表达式在Python中捕获字符串和\n字符之间的数据,python,regex,Python,Regex,我正在学习python,我想捕获'NUMBER:'和\n之间的数据 号码:3741733552\n556644 变量中新行字符后的数字,因此不能指望它捕获 re.search(r'NUMBER:(.*?)[\n]', string_data).group(1) 我徒劳地尝试了上述代码(这是错误的),请帮助捕获该数字。多谢各位 编辑: 我有一个字符串“NAME:KHAN NASEEM\n\n22972 LAHSER RD\n\n…”,我像代码一样使用它 name = re.sea

我正在学习python,我想捕获'NUMBER:'和\n之间的数据

号码:3741733552\n556644

变量中新行字符后的数字,因此不能指望它捕获

    re.search(r'NUMBER:(.*?)[\n]', string_data).group(1)
我徒劳地尝试了上述代码(这是错误的),请帮助捕获该数字。多谢各位

编辑:

我有一个字符串“NAME:KHAN NASEEM\n\n22972 LAHSER RD\n\n…”,我像代码一样使用它

    name = re.search(r'NAME:\s*(.+)', string_data) 
但我得到的输出是“KHAN NASEEM\n\n22972 LAHSER RD\n\n…”,但我只想要KHAN NASEEM

\n=字符串文字,而不是实际的新行

您可以尝试以下方法:

import re
s = "NUMBER: 3741733552\n556644"
final_data = re.findall('NUMBER:\s*(.*?)\n', s)
输出:

['3741733552']

下面是我对你问题的解答。它简短易读。你可能会变得更复杂,但我喜欢让事情变得简单:-)。我希望这对你有帮助

>>> import re
>>> num = 'NUMBER: 3741733552\n556644'
>>> search = re.search(r'([0-9].*)', num).group(0)
>>> print(search)
3741733552

如果您试图获取从
NAME:
到反斜杠(后跟
n
字母)的所有字符,请使用

\bNAME:\s*(.+?)(?:\\n|$)

详细信息

  • \b
    -单词边界
  • 名称:
    -a
    名称:
    子字符串
  • \s*
    -0+空格
  • (.+?)
    -第1组:除线路断路器以外的一个或多个字符,尽可能少
  • (?:\\n |$)
    -字符串结尾或后跟
    n的反斜杠
下表为:

注意:您应该检查如何将文本从DB提取到Python。
\n
实际上应该是换行符。一旦修复,您只需使用

r'\bNAME:\s*(.+)'

一个完整的单词
名称:
、0+空格和组1将捕获除换行符以外的一个或多个字符(即行的其余部分)。

使用
r'NUMBER:\s*(\d+)
r'NUMBER:\s*(.+)
谢谢@WiktorStribiżew上述解决方案适用于数字和字符,如果我遇到类似问题,对吗?
匹配除换行字符以外的任何字符
\d
匹配数字,但请注意,在Python3中,它将匹配任何Unicode数字。如果您只需要mstch ASCII数字,则必须使用
re.A
标志或只使用
[0-9]
。使用
NAME:\s*(.+)
是的,我理解,但是类似于
r'\bNAME:\s*(.+)(?:\\n |$)
的正则表达式不是一个好的解决方案,因为您的字符串是“转义的”。您的主要问题是转义字符串。
r'\bNAME:\s*(.+)'