我只需要在字符串的开头使用字母和数字,但是有些数字是小数。字符串的格式并非全部相同。以下是一些数据的一些示例以及我需要返回的内容:
HB61 .M16 1973我需要退还HB61
HB97.52 .R6163 1982我需要退回HB97.52
HB98.V38 1994我需要退还HB98
HB 119.G74 A3 2007我需要退回HB119
我对编码非常陌生,所以希望有一些我不知道的简单解决方案?
我只是将其分割为第一个点,然后去除空格,但这不允许我保留我需要的小数,例如HB97.52。我目前编写的代码只是一次测试一个字符串。代码如下:
clientel
除了带小数的字符串外,这可以按预期工作。对于HB97.52 .R6163 1982,我希望返回HB97.52,但仅返回HB97。
答案 0 :(得分:4)
以下正则表达式提取字符串开头的字母,后跟可选空格,后跟[可能是浮点数]数字:
s = ['HB61 .M16 1973', 'HB97.52 .R6163 1982',
'HB98.V38 1994', 'HB 119.G74 A3 2007']
import re
pattern = r"^[a-z]+\s*\d+(?:\.\d+)?"
[re.findall(pattern, part, flags=re.I)[0] for part in s]
#['HB61', 'HB97.52', 'HB98', 'HB 119']
如果您不希望在输出中使用空格,则此稍有不同的模式将分别提取字母部分和数字部分,然后将它们连接起来:
pattern = r"(^[a-z]+)\s*(\d+(?:\.\d+)?)"
list(map("".join, [re.findall(pattern, part, flags=re.I)[0] for part in s]))
#['HB61', 'HB97.52', 'HB98', 'HB119']
答案 1 :(得分:0)
对于诸如HB61.45.78.R5000之类的产品,您想要什么?如果您想要HB61.45.78,请使用以下第一段代码:
data = data.replace(' ', '')
data = data.split('.')
wanted = data[0]
for i in range(1,len(data)):
if data[i][0].isalpha():
break
else:
wanted += '.' + data[i]
否则,如果只需要HB61.45,请使用
data = data.replace(' ', '')
data = data.split('.')
wanted = data[0]
if not data[1][0].isalpha():
wanted += '.' + data[1]