2024-09-27 21:27:09 发布
网友
我有以下字符串。你知道吗
示例:
我想把他们分成以下几组
我正在使用这个正则表达式-(\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)
您可以将.*?替换为\s*,以匹配零个或多个whitepasces,并使第一个捕获组成为可选的:
.*?
\s*
(\d*\.?\d+)?\s*([A-Z]+) ^^^^
参见regex demo。你知道吗
注意,我还将匹配子模式\d*\.?\d+的数字修改为类似.56的mathc数字。你可以保持你自己的模式。你知道吗
\d*\.?\d+
.56
图案细节:
(\d*\.?\d+)?
\d*
\.?
\d+
([A-Z]+)
要以元组列表的形式获取捕获组内容,请使用re.findall(demo):
re.findall
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']
您可以将
.*?
替换为\s*
,以匹配零个或多个whitepasces,并使第一个捕获组成为可选的:参见regex demo。你知道吗
注意,我还将匹配子模式
\d*\.?\d+
的数字修改为类似.56
的mathc数字。你可以保持你自己的模式。你知道吗图案细节:
(\d*\.?\d+)?
-可选组1\d*
-零个或多个数字\.?
-可选点\d+
-1个或更多数字\s*
-零个或多个空格([A-Z]+)
-组2捕获一个或多个大写ASCII字母。你知道吗要以元组列表的形式获取捕获组内容,请使用
re.findall
(demo):输出为:
相关问题 更多 >
编程相关推荐