用正则表达式切断尾随组

时间:2016-07-30 17:38:46

标签: python regex

我有几个字符串都以一些数字结尾,后面紧跟着许多非数字字符,例如10.1002/0470868279-ch1。我想切断这个群体;对于此示例-ch1。我试过了

import re

str0 = '10.1002/0470868279-ch1'

a = re.match('(.*)([^0-9]+[0-9]*)', str0)
print(a.group(0))
print(a.group(1))
print(a.group(2))

str1 = '10.1002/0470868279.1'  # likewise

但事实并非如此:

10.1002/0470868279.ch1
10.1002/0470868279.c
h1

我想正则表达式从一开始就贪婪地匹配。

任何提示?

2 个答案:

答案 0 :(得分:3)

添加?以使第一场比赛非贪婪,以便尽可能少地匹配。同时添加$以便匹配将始终到字符串结尾:

a = re.match('(.*?)([^0-9]+[0-9]*)$', str0)

答案 1 :(得分:0)

以下内容应与您想要的内容相匹配:(-|\+)?\d+(\.\d*)?/(-|\+)?\d+(\.\d*)?这样您就可以提取所需的数字。

此模式仅匹配结束部分(-ch1示例上测试):(?<=\d)[^\d\./][a-zA-Z0-9]*$

我不确定你的意思&#34;切断&#34;,看到你的例子只是拔出组而不是实际操纵字符串来切断任何东西,但是这些模式中的任何一种应该提取你正在寻找的部分。