我有几个字符串都以一些数字结尾,后面紧跟着许多非数字字符,例如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
我想正则表达式从一开始就贪婪地匹配。
任何提示?
答案 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;,看到你的例子只是拔出组而不是实际操纵字符串来切断任何东西,但是这些模式中的任何一种应该提取你正在寻找的部分。