Python正则表达式的帮助

2024-09-27 21:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串。你知道吗

示例:

  • 12 CG GRB
  • 6GRC 11.2百万
  • 2克1.75升

我想把他们分成以下几组

  • [12,CG][GRB]
  • [6,GRC][11.2,MK]
  • [2,克][1.75,LRG]

我正在使用这个正则表达式-(\d+。)。?\d*)*?([A-Z]+)但是有了它,我无法正确地捕捉第一个示例。我得到的不是[12,CG][GRB],而是[12,CG]。你知道吗

任何帮助都将不胜感激。你知道吗

import re
p = re.compile(ur'(\d+\.?\d*).*?([A-Z]+)')
test_str = u"12 CG GRB"

re.findall(p, test_str)

Tags: 字符串testimportre示例cgcompilemk
2条回答

您可以将.*?替换为\s*,以匹配零个或多个whitepasces,并使第一个捕获组成为可选的:

(\d*\.?\d+)?\s*([A-Z]+)
           ^^^^

参见regex demo。你知道吗

注意,我还将匹配子模式\d*\.?\d+的数字修改为类似.56的mathc数字。你可以保持你自己的模式。你知道吗

图案细节:

  • (\d*\.?\d+)?-可选组1
    • \d*-零个或多个数字
    • \.?-可选点
    • \d+-1个或更多数字
  • \s*-零个或多个空格
  • ([A-Z]+)-组2捕获一个或多个大写ASCII字母。你知道吗

要以元组列表的形式获取捕获组内容,请使用re.findalldemo):

import re
p = re.compile(r'(\d*\.?\d+)?\s*([A-Z]+)')
s = "12 CG GRB\n6GRC 11.2 MK\n2 GR 1.75LRG"
print(p.findall(s))
s = "12 CG GRB\n6GRC 11.2 MK\n2 GR 1.75LRG"
re.split(r"(?<!\d)\s", s)

输出为:

['12 CG', 'GRB', '6GRC', '11.2 MK', '2 GR', '1.75LRG']

相关问题 更多 >

    热门问题