我有以下字符串。
示例:
我想将它们分成以下组
我正在使用这个正则表达式 - (\ 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)
答案 0 :(得分:0)
您可以将.*?
替换为\s*
以匹配零个或多个whitespasces,并使第一个捕获组成为可选:
(\d*\.?\d+)?\s*([A-Z]+)
^^^^
请参阅regex demo。
注意我还将数字匹配子模式修改为\d*\.?\d+
以及.56
之类的数学数字。你可以保留自己的模式。
模式详细信息:
(\d*\.?\d+)?
- 可选的第1组捕获
\d*
- 零个或多个数字\.?
- 一个可选的点\d+
- 一位或多位\s*
- 零个或多个空格([A-Z]+)
- 第2组捕获一个或多个大写ASCII字母。要将捕获组内容作为元组列表获取,请使用re.findall
(demo):
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))
答案 1 :(得分:0)
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']